Intereting Posts
Загрузочная библиотека Google php loadServiceAccountJson – исправлена ​​в приложении PHP DOMDocument, оберните все элементы без узла с помощью p Файл изображения, успешно загруженный с помощью приложения Google App Engine, не существует в ведре PHP xml-файл с исправлением ошибок SimpleXML Преобразование времени в формате HH: MM: SS только на секунды? неожиданный приведение в boolean? Как узнать, сколько байтов имеет символ? Как получить размер изображения из базы 64 строки в php Drupal 7 FAPI – предварительный просмотр ajax Как использовать str_replace () для удаления текста определенное количество раз только в PHP? Обновление PHP Composer «не может выделить память» (с использованием Laravel 4) Добавление опции «другой, пожалуйста, укажите» в поле формы ChoiceType в Symfony Потерять значение $ _SESSION при перенаправлении Уточнение результатов поиска на основе фильтров Форматировать ошибку PHP на рабочем сервере

Array_filter и empty ()

Предупреждение: 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() .

    Помогло ли это?