2013-07-06 184 views
2

我環顧四周,不能完全找到這個答案,所以我不知道我是否包含數組如這個..如何檢查多維數組是否只包含空值?

$array['foo']['bar'][1] = ''; 
$array['foo']['bar'][2] = ''; 
$array['foo']['bar'][3] = ''; 
$array['foo']['bar'][4] = ''; 

我如何檢查是否所有的值都是空的?我試圖做以下幾點:

if (empty($array['foo']['bar'])) { 
    // Array empty 
} 

但如預期的那樣沒用。

我該怎麼做?

回答

3

如果你想檢查是否所有的填充其中的值,你可以用

if(call_user_func_array("isset", $array['foo']['bar'])) 

對於你想做的事,雖然你可以使用數組與閉合

if(array_reduce($array, function(&$res, $a){if ($a) $res = true;})) 
減少

請注意,這將只在php 5.3+工作

+0

+1對於一行:P –

+0

嗯,看看'php.net'網站上的例子不是將數組值分割成單獨的變量,因此這會將4個值傳遞給isset並且無效? – Brett

+0

@brett你是對的...我會更新 – Orangepill

1

$array['foo']['bar']不是空的,因爲它實際上是array(1=>'',2=>'',3=>'',4=>'')

你需要做一個foreach循環來檢查它是否確實全是空的。

$arr_empty = true; 
foreach ($array['foo']['bar'] as $arr) { 
    if (!empty($arr)) { 
     $arr_empty = false; 
    } 
} 
//$arr_empty is now true or false based on $array['foo']['bar'] 
1

一個簡短的替代方案將是:

if (empty(implode($array['foo']['bar']))) { 
    // is empty 
} 

請注意,某些單個值可能會被視爲空。請參閱empty()

相關問題