empty () недействительный обратный вызов?

Я пытаюсь использовать empty () в сопоставлении массивов в php. Я получаю ошибки, что это не действительный обратный вызов.

$ cat test.php <? $arrays = array( 'arrEmpty' => array( '','','' ), ); foreach ( $arrays as $key => $array ) { echo $key . "\n"; echo array_reduce( $array, "empty" ); var_dump( array_map("empty", $array) ); echo "\n\n"; } 

 $ php test.php arrEmpty Warning: array_reduce(): The second argument, 'empty', should be a valid callback in /var/www/authentication_class/test.php on line 12 Warning: array_map(): The first argument, 'empty', should be either NULL or a valid callback in /var/www/authentication_class/test.php on line 13 NULL 

Разве это не работает?

Длинная история: я пытаюсь быть (тоже?) Умным и проверять, что все значения массива не являются пустыми строками.

Это потому, что empty – это языковая конструкция, а не функция. Из руководства на пустом ():

Примечание. Поскольку это языковая конструкция, а не функция, ее нельзя вызвать с помощью переменных функций

Попробуйте array_filter без обратного вызова:

Если обратный вызов не предоставляется, все записи ввода, равные FALSE (см. Преобразование в логическое), будут удалены.

Затем вы можете использовать count(array_filter($array)) чтобы увидеть, есть ли у него значения.

Или просто оберните пустой в вызываемый, например:

 array_reduce($array, create_function('$x', 'return empty($x);')); 

или с PHP 5.3

 array_reduce($array, function($x) { return empty($x); }); 

Чтобы добавить к другим, разработчикам PHP часто приходится создавать такую ​​функцию:

 function isEmpty($var) { return empty($var); } 

Пустой нельзя использовать в качестве обратного вызова, он должен работать с переменной. Из руководства :

Примечание: empty () проверяет только переменные, так как все остальное приведет к ошибке синтаксического анализа. Другими словами, следующее не будет работать: empty (trim ($ name)).

Я не знаю, почему, как-то пусто () работал для меня внутри обратного вызова.

Причина, по которой я изначально получал эту ошибку, заключалась в том, что я пытался вызвать обратную связь как независимую функцию, тогда как она была внутри моего класса, и мне пришлось называть ее с помощью массива (& $ this, 'func_name')

См. Код ниже. Меня устраивает. Я php 5.2.8, если это имеет значение …

 $table_values = array_filter( $table_values, array(&$this, 'remove_blank_rows') ); function remove_blank_rows($row){ $not_blank = false; foreach($row as $col){ $cell_value = trim($col); if(!empty( $cell_value )) { $not_blank = true; break; } } return $not_blank; }