0

我正在尝试使用 lambda 语法在 PHP 中使用数组过滤器函数编写排序/过滤器脚本。

这实现了我想要做的,但它看起来可以优化:

$offersReceivedProcessedByItem = array();
  foreach ($this->currentSessionUser->items as $item) {
    $receivedOffersOnItem = array();
    foreach ($offersReceived as $offerReceived) {
     if ($offerReceived->item->id === $item->id) {
       $receivedOffersOnItem[$offerReceived->id] = $offerReceived;
     }
    }
  offersReceivedProcessedByItem[$item->id] = $receivedOffersOnItem;
}

(对于用户拥有的每个项目,通过 offerReceived 数组进行过滤,如果它具有相同的 id,则将其添加到新数组中,如果这有意义吗?!)。

这是我正在尝试的:

$offersReceivedProcessedByItem = array();
foreach ($this->currentSessionUser->items as $item) {
   $receivedOffersOnItem = array_filter($item->offers, function($offer){
     return $offer->item->id === $item->id;
   });
   $offersReceivedProcessedByItem[$item->id] = $receivedOffersOnItem;
}

但是我得到 $item 是未定义的,我希望它是封闭的范围,所以我尝试将 $item 作为另一个参数传递,但后来我得到'缺少参数 2'。

我使用 Fuel 中内置的关系方法进行了尝试,但是 PHP 占用了太多内存并且失败了。

有什么帮助吗?我怎么了?

4

1 回答 1

2

闭包对它创建的环境一无所知,除非你告诉它

$receivedOffersOnItem = array_filter($item->offers, function($offer) use($item){
   return $offer->item->id === $item->id;
});

注意use- 语句

手册链接http://php.net/functions.anonymous#example-119

于 2013-02-14T21:27:49.857 回答