2015-11-24 59 views
0

我有一個項目的一大組時間記錄,我想過濾掉除了單個員工發佈的所有記錄。Php array_walk,用於過濾結果的匿名函數

array_walk($timeRecords, function($timeRecord, $index) use ($employee) { 
    if ($timeRecord->employeeId != $employee->id) { 
     unset($timeRecords[$index]); 
    } 
}); 

你可以看到我想要做什麼。你如何去做這個與非功能和封閉?顯然$ timeRecords在匿名函數中沒有定義。謝謝。

+3

你可能想看看'array_filter()',它更適合於這個任務。 – Calimero

+0

完美。謝謝! – JamesNZ

回答

0

Calimero指出這是該工作的錯誤工具。使用array_filter可以達到所需的效果。 Array_walk似乎被設計用於通過引用修改單個數組項目。

這是如何實現我想要的。

$timeRecords = array_filter($timeRecords, function($timeRecord) use ($employee) { 
    if ($timeRecord->EmployeeId == $employee->EmployeeId) { 
     return $timeRecord; 
    } 
}); 
+0

也許你想再次看看'array_filter()'的文檔,如果你想保留元素或者不需要返回true/false – Rizier123

+0

啊我錯過了。它就在文檔中(http://php.net/manual/en/function.array-filter.php)。謝謝。 – JamesNZ