Предупреждение: array_filter () ожидает, что параметр 2 будет действительным обратным вызовом, функция 'empty' not found или недопустимое имя функции ….
Почему пустым считается неправильный обратный вызов?
$arr = array_filter($arr, 'empty');
Это работает: if(empty($arr['foo'])) die();
empty()
не является функцией, но конструктор языка и array_filter()
могут принимать только функцию в качестве обратного вызова.
Это дается как небольшая заметка на странице руководства:
Примечание. Поскольку это языковая конструкция, а не функция, ее нельзя вызвать с помощью переменных функций
Чтобы обойти это, вы можете обернуть пустой в другой функции, например:
function empty_test($val) { return empty($val); }
И затем назовите его так:
$arr = array_filter($arr, 'empty_test');
empty()
– это языковая конструкция, а не истинная функция с точки зрения PHP, поэтому вы не можете передавать ее имя в качестве аргумента для функций типа array_filter()
и call_user_func_array()
.
Из руководства:
Примечание . Поскольку это языковая конструкция, а не функция, ее нельзя вызвать с помощью переменных функций
Для обходного пути просто оберните его в другую пользовательскую функцию; см . ответ Треффиннона .
См. Страницу документации на empty()
:
Примечание. Поскольку это языковая конструкция, а не функция , ее нельзя вызвать с помощью переменных функций
Таким образом, в принципе empty()
не является функцией , и поскольку обратный вызов должен быть функцией , empty()
не может быть передан как обратный вызов .
Но вы можете создать обратный вызов, который может использовать empty()
. Следующее должно работать в PHP> 5.3:
$arr = array_filter($arr, function($var){ return empty($var); });
В PHP <5.3 вам нужно сначала создать аналогичную функцию, а затем передать ее в array_filter()
.
Помогло ли это?