Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中过滤数组_Php - Fatal编程技术网

在PHP中过滤数组

在PHP中过滤数组,php,Php,我正在尝试使用lambda语法在PHP中使用数组过滤器函数编写排序/过滤器脚本 这实现了我想要做的,但看起来可以优化: $offersReceivedProcessedByItem = array(); foreach ($this->currentSessionUser->items as $item) { $receivedOffersOnItem = array(); foreach ($offersReceived as $offerReceived) {

我正在尝试使用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;
}
(对于用户拥有的每个项目,通过offersReceived数组进行筛选,如果该项目具有相同的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占用了太多内存,并且失败了


有什么帮助吗?我做错了什么?

闭包不知道它创建的环境,除非你告诉它

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


手册的链接

就这样!根据我的Javascript经验,我认为这是一个范围问题,但我从未听说过“use”语句。关于PHP还有很多需要学习的地方。谢谢你的帮助!