2013-12-12 104 views
1

正確的點。我有一個提交多維數組值的表單。通常它會得到像這樣的東西。刪除空值的空數組

[0] => Array 
    (
     [socialClass] => Myclass 
     [socialLink] => http://... 
     [socialName] => Name 
    ) 

[1] => Array 
    (
     [socialClass] => 
     [socialLink] => MyClass 
     [socialName] => Name 
    ) 

[2] => Array 
    (
     [socialClass] => 
     [socialLink] => 
     [socialName] => 
    ) 

的想法ES從樹中刪除不完整的陣列,像[1][2],所以過濾後,我會回到這個樣子。

[0] => Array 
    (
     [socialClass] => Class 
     [socialLink] => http://... 
     [socialName] => Name 
    ) 

array_filter不會在這種情況下工作,等「遞歸」定製功能,無論是。我該怎麼做?

+0

其實,array_filter在這種情況下工作得非常好。 – Edakos

+0

試過了,沒有工作。很多答案!我要測試他們,併發布結果。 – DarkGhostHunter

回答

3

以下array_filter調用與自定義過濾器功能,應該爲你做的伎倆:

$arr = array_filter($arr, function($sub_arr) { 
    foreach ($sub_arr as $item) 
     if ($item === "") 
      return false; 
    return true; 
}); 

你會注意到,如果它的任何子陣列值是空字符串,該項目將被刪除。

+0

這是即插即用,可用於任何陣列。 +1 –

+0

是的,這個工程。最終的結果是「Array()」,所以我只需要添加「if(empty($ arr))unset $ arr」。 – DarkGhostHunter

0

濾鏡陣列會在這種情況下,確切是巨大的:

$result = array_filter($input, function($a){ 
    return isset($a['socialClass']) 
      && isset($a['socialLink']) 
      && isset($a['socialName']) 
      && !empty($a['socialClass']) 
      && !empty($a['socialLink']) 
      && !empty($a['socialName']); 
}); 

這應該工作!

+0

如果數組索引存在但其值爲空字符串,則不會按預期工作。 –

+0

空字符串正確! –

3

對於PHP> = 5.3

$myarray = array_filter($myarray, function ($node) { 
    return count(array_filter($node)) == count($node); 
}); 
+0

這也適用,至少對於1級嵌套 - 我使用PHP 5.5,所以它就像一個魅力。謝謝。 – DarkGhostHunter