【问题标题】:empty() not a valid callback?empty() 不是一个有效的回调?
【发布时间】:2010-04-08 19:54:17
【问题描述】:

我正在尝试在 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

这不应该工作吗?

长话短说:我试图(太?)聪明并检查所有数组值是否不是空字符串。

【问题讨论】:

    标签: php callback array-map


    【解决方案1】:

    这是因为empty 是一种语言结构,而不是一个函数。来自manual on empty():

    注意:因为这是一个语言构造而不是函数,所以不能使用变量函数调用它

    【讨论】:

    • 你知道我喜欢这个网站的什么吗?人们没有说“RTFM!” :D
    • @user151841 我们不允许这样做。这是唯一的原因;)
    【解决方案2】:

    试试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); });
    

    【讨论】:

      【解决方案3】:

      为了增加其他功能,PHP 开发人员通常会创建这样的函数:

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

      【讨论】:

        【解决方案4】:

        Empty 不能用作回调,它需要对变量进行操作。来自manual

        注意:empty() 只检查变量,否则会导致解析错误。换句话说,以下内容将不起作用:empty(trim($name))。

        【讨论】:

          【解决方案5】:

          我不知道为什么,因为 empty() 在回调中对我有用。

          我最初收到此错误的原因是因为我试图作为一个独立函数进行回调,而它在我的类中,我必须使用 array(&$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;
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-26
            • 2016-10-28
            • 1970-01-01
            • 2016-11-08
            • 1970-01-01
            • 1970-01-01
            • 2013-08-01
            相关资源
            最近更新 更多