2015-11-24 4 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