2010-04-08 26 views
3

我想在php中使用empty()數組映射。我收到錯誤,它不是一個有效的回調。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 

不應該工作的呢?

長篇小說:我想要(太?)聰明,並檢查所有數組值不是空字符串。

回答

9

這是因爲empty是一種語言結構,而不是功能。從manual on empty():

注:由於這是一個語言結構而非函數,因此它無法被變量函數

稱爲
+0

@皮卡讀我的腦海+1 – 2010-04-08 20:00:58

+0

你知道我喜歡這個網站嗎?人們不是在說「RTFM!」 :D – user151841 2010-04-09 13:31:59

+0

@ user151841我們不允許。這是唯一的原因;) – Gordon 2010-04-09 18:14:40

0

空不能用作回調,它需要進行操作一個變量。從manual

注意:empty()只檢查變量,否則將導致分析錯誤。換句話說,以下內容不起作用:空(trim($ name))。

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); }); 
+0

總是想知道爲什麼沒有boolval()函數。 – goat 2010-04-08 23:22:38

2

要添加到別人的,是很常見的PHP開發人員創建的功能等這個:

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

我不知道爲什麼,以某種方式empty()在回調中爲我工作。

爲什麼我最初得到這個錯誤是因爲我試圖回調作爲一個獨立的功能,而這是我的課堂裏,我不得不使用數組來調用它的原因(& $此,「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; 

} 
相關問題