2012-06-23 108 views
3

我有一個數組,看起來像這樣:檢查數組子項具有空值

$arr = array(

    'abc' => array(
      'subkey1' => '', 
      'subkey2' => false,    
      'subkey3' => 0, 
      ...       
      ), 

    'def' => array(
      'subkey1' => '', 
      'subkey2' => 555,    
      'subkey3' => 0, 
      ...       
      ), 

    ... 

); 

我想取消設置在其中的所有子項具有空值的所有父元素,如0''falsenull。在我的示例abc需要未設置。

目前我手動foreach循環如果每個子項爲空內檢查,但如果條件是巨大的,因爲我有8子項:)

是否有這個一個更好的選擇嗎?

+0

不要你的意思'abc'應該是在這種情況下,未設置? – Jeroen

+0

你在做什麼似乎是正確的方法,你可以使用遞歸,但條件也將如此巨大。 –

+0

是的,很抱歉糾正它:D – thelolcat

回答

7
$array = array_filter($array, 'array_filter'); 

View the output on codepad

Array 
(
    [def] => Array 
     (
      [subkey1] => 
      [subkey2] => 555 
      [subkey3] => 0 
     ) 

) 

array_filter()將循環陣列之上並調用每個子陣列上的內array_filter(),這將去除是空的所有子項。如果每個子項都是空的,則外部array_filter()應該刪除整個子陣列。

如果沒有回調被提供時,輸入等於FALSE(見轉換成布爾值)的所有條目將被刪除。

+0

我正要發佈這個。另外,只要有可能,我發現最好堅持內置方法而不是定製方法。 –

+0

+1。唯一的事情是這仍然刪除有效條目的空子項。你可以使用這個結果中的關鍵字,並與原始數組結合,如果這是一個概率。 – goat

+0

好點...但是你是什麼意思'你可以使用...與原始數組'? – Jeroen

0

如何:

foreach ($arr as $index=>$element) 
{ 
    if (in_array(0, $element)) 
    { 
    unset($arr[$index]); 
    } 
} 
+0

對此有何解釋? ;) – markus