我正在尝试在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
不应该这样吗?
长篇故事:我正试图(太?)聪明并检查所有数组值都不是空字符串。
答案 0 :(得分:9)
这是因为empty
是一种语言结构,而不是一种功能。来自manual on empty():
注意:因为这是一种语言结构而不是函数,所以不能使用变量函数调用它
答案 1 :(得分:7)
尝试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 :(得分:2)
要添加到其他人,PHP开发人员通常会创建这样的函数:
function isEmpty($var)
{
return empty($var);
}
答案 3 :(得分:0)
Empty不能用作回调,它需要对变量进行操作。来自manual:
注意:empty()仅检查变量,因为其他任何内容都会导致解析错误。换句话说,以下将不起作用:empty(trim($ name))。
答案 4 :(得分:0)
我不知道为什么,不知何故,empty()在回调中为我工作。
我最初收到此错误的原因是因为我试图回调为一个独立的函数,而它在我的类中,我不得不使用数组调用它(&amp; $ 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;
}