3

PHPの配列マッピングでempty()を使用しようとしています。有効なコールバックではないというエラーが表示されます。

$ 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

これはうまくいかないのですか?

長い話:私は(あまりにも?)賢くなり、すべての配列値が空の文字列ではないことを確認しようとしています。

4

5 に答える 5

9

これemptyは、が言語構造であり、関数ではないためです。empty()のマニュアルから:

注:これは言語構造であり、関数ではないため、変数関数を使用して呼び出すことはできません

于 2010-04-08T19:56:46.053 に答える
7

array_filter代わりにコールバックなしで試してください:

コールバックが指定されていない場合、FALSEに等しい入力のすべてのエントリ(ブール値への変換を参照)が削除されます。

次に、を使用count(array_filter($array))して、まだ値があるかどうかを確認できます。

または、次のように、空を呼び出し可能にラップします。

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

またはPHP5.3以降

array_reduce($array, function($x) { return empty($x); });
于 2010-04-08T20:03:54.097 に答える
2

他のものに追加するために、PHP開発者は次のような関数を作成するのが一般的です。

function isEmpty($var)
{
    return empty($var);
}
于 2010-04-08T20:05:51.223 に答える
0

Emptyはコールバックとして使用できません。変数を操作する必要があります。マニュアルから:

注:empty()は変数のみをチェックします。それ以外の場合は、解析エラーが発生するためです。つまり、次は機能しません:empty(trim($ name))。

于 2010-04-08T19:59:27.700 に答える
0

理由はわかりませんが、コールバック内で何とかempty()が機能しました。

最初にこのエラーが発生した理由は、独立した関数としてコールバックしようとしたのに対し、クラス内にあり、array(&$ this、'func_name')を使用して呼び出す必要があったためです。

以下のコードを参照してください。わたしにはできる。それが重要な場合、私はphp5.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;

}
于 2011-04-29T16:08:06.347 に答える