2015-02-08 48 views
1

我有一個數組,我想測試空元素,我試圖使用array_walk來走一個數組(單維數組),並返回true,如果元素(值)的數組有空任何元素。如何測試數組中是否有空值?

我很自然地去了PHP網站,看着提供的例子,他們沒有任何意義,因爲它沒有給出如何使用array_walk這個明確的例子。我嘗試了array_filter,而且這似乎也沒有做太多。

我正在嘗試做的例子。

$test = array("Tree"=>"Ash","TreeID"=>"Q23-123","count"=>14,"User"=>"P.Williams"); 
$result = array_walk($test, "empty", true); 

我得到的結果是「Array」。

和PHP解析器有一個hissy適合它,他們說清楚,bool array_walk (array &$array , callable $callback [, mixed $userdata = NULL ])在他們的網站,這我推測是$result array_walk ($theTargetArray, "StringNameOfFunction", theResultIfTure);東西,但沒有那麼簡單。

到目前爲止,我發現很多很多的網站例子,人們似乎在剛纔複製並粘貼PHP的例子,有的已經改變了他們的名字來隱藏他們複製和粘貼的例子...

有人可以讓我知道我在這裏做錯了什麼嗎?

(還有糧農組織的stackoverflow網站維護者,提示標籤有什麼意義,我點擊使用它,然後我被告知除非我有1500分,否則我無法創建新標籤???認真的原因?好主意如果你去考慮那個問題)。

+0

Stackoverflow不允許這樣做,因爲它可以導致很多垃圾郵件,維護人員不可能搜索到好的標籤,然後刪除它們。 – 2015-02-08 17:36:40

+0

'我得到的所有結果都是「數組」。什麼結果? – 2015-02-08 17:37:17

+0

Stackoverflow不允許這樣做,因爲它可能會導致很多垃圾郵件,它不可能讓維護人員將其刪除 – 2015-02-08 17:38:32

回答

1

array_walk不會幫助你。它是一個增變函數,用於更改數組元素,而不是檢索有關它們的信息。您正在尋找的是布爾聚合函數,其他語言中稱爲anysome。 PHP不提供開箱的,所以你必須手工把它寫:

function any($iter, $pred) { 
    foreach($iter as $item) 
     if($pred($item)) 
      return true; 
    return false; 
} 

但是,試圖與empty使用它,因爲在

print any($test, 'empty') 

會失敗,因爲empty不是一個真正的功能,不能間接使用。一種解決方法是把它包在另一種功能,並傳遞一個any

any($test, function($x) { return empty($x); }) 

另一種選擇是通過boolval過濾的陣列,從而消除「falsy」值,並比較長度:

$hasEmptyElements = count(array_filter($test, 'boolval')) < count($test); 

請注意,不像any,這是「懶惰」,filter總是處理整個數組。

2
$my_arr = array(....); // your array here 
$has_empty_value = sizeof($my_arr) != sizeof(array_filter($my_arr)); 
0

docsarray_walk爲說「適用的用戶定義的回調函數到陣列數組的每個元素。「因此,你可以用自己的回調或與封閉使用它,就像這樣:

$test = array("Tree"=>"Ash","TreeID"=>"Q23-123", "count"=> 14, "User"=>"P.Williams"); 
    $result = array_walk($test, function($value) { 
     return empty($value); 
    }); 

當然,這取決於你正在嘗試通過所有的價值觀和$result意願實現,因爲這將循環什麼是true如果所有的值是空的,但最後一個是不

如果您想找出是否有任何值都是空的,停止它發現後,一個空的項目將是更好的功能。

function hasEmptyValues(array $array) 
{ 
    foreach ($array as $key => $value) { 
     if (empty($value)) { 
      //Empty value found 
      return true; 
     } 
    } 
    //None of the values are empty 
    return false; 
}