2013-02-14 85 views
0

我正在嘗試使用lambda語法在PHP中使用數組過濾器函數編寫排序/過濾器腳本。在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; 
} 

但我收到$項目是不確定的,我希望它是封閉的範圍,所以我嘗試通過$項目作爲另一個說法,但隨後我得到'缺少論點2'。

我嘗試過使用內置於Fuel中的關係方法,但PHP吃了太多內存並失敗。

任何幫助?我錯了什麼?

回答

2

的閉合不知道它是創建它的環境什麼,除非你告訴它

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

通知的use語句來

到手動http://php.net/functions.anonymous#example-119

+0

一個鏈接,就是它!我認爲這是我的Javascript經驗範圍問題,但我從來沒有聽說過'使用'聲明。還有很多關於PHP的知識。謝謝您的幫助! – 2013-02-14 21:36:13