empty () не является допустимым обратным вызовом? - PullRequest
3 голосов
/ 08 апреля 2010

Я пытаюсь использовать 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

Разве это не должно работать?

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

Ответы [ 5 ]

9 голосов
/ 08 апреля 2010

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

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

7 голосов
/ 09 апреля 2010

Попробуйте 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); });
2 голосов
/ 09 апреля 2010

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

function isEmpty($var)
{
    return empty($var);
}
0 голосов
/ 29 апреля 2011

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

Причина, по которой я изначально получал эту ошибку, заключалась в том, что я пытался вызвать обратный вызов как независимую функцию, тогда как она находилась внутри моего класса, и мне пришлось вызывать ее, используя массив (& $ 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;

}
0 голосов
/ 08 апреля 2010

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

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

...