2011-04-21 191 views
10

我如何遍歷這個數組,並刪除任何空值:PHP陣列 - 刪除空值

[28] => Array 
    (
     [Ivory] => 
     [White] => 
    ) 

[29] => Array 
    (
     [Ivory] => 
     [White] => 
    ) 

[30] => Array 
    (
     [Ivory] => 
     [White] => 36 
    ) 

[31] => Array 
    (
     [White] => 24 
    ) 

所以說,它會從30取出28,29,只是象牙...

謝謝!

回答

4

我相信這會做你要找的內容:

foreach($array as $key => $value) { 
    if(is_array($value)) { 
     foreach($value as $key2 => $value2) { 
      if(empty($value2)) 
       unset($array[ $key ][ $key2 ]); 
     } 
    } 
    if(empty($array[ $key ])) 
     unset($array[ $key ]); 
} 

它會通過您的外部陣列循環,陷入包含的任何陣列和刪除鍵,其值爲空。然後,一旦完成,它將從外部數組中刪除任何其子值都爲空的鍵。

請注意,它不適用於通用數組,只是您提供的一個數組(二維)。

+0

啊,魔術......謝謝瑞安:) – 2011-04-21 22:35:39

-1

您可能需要編輯下面的代碼。

foreach ($arr as $key => $value) { 
    if($value == "") { 
    unset($value[$key]); 
    } 
} 
+0

嗯,似乎沒有工作......我把一個死;在if語句中,但它似乎並沒有死亡 - I.E.它不匹配 – 2011-04-21 22:31:59

+0

這不起作用,因爲'$ value'將會是一個數組;他想要從內部和外部數組中刪除空值的空鍵 – Ryan 2011-04-21 22:32:20

+0

是的,這是一個簡短的代碼示例來顯示循環,檢查和取消設置。我正在研究功能代碼,但是在完成之前您已經發布瞭解決方案。 – 2011-04-21 22:41:02

1

的另一種方法,使用preg_grep

foreach($array as $key => $subarray) { 
    $array[$key] = preg_grep('/^$/', $subarray, PREG_GREP_INVERT); 
} 

更新:忘了取出空數組。 @Ryan's answer中所示的技術也可以在此應用。

+0

不錯,我從來沒有用過preg_grep。但我不認爲這會從陣列中刪除索引28和29,但是? – Ryan 2011-04-21 22:43:33

+0

@Ryan:真的,不知何故,我忘了這件事;)但是你已經提供了一個很好的答案,以便如何去做...... – 2011-04-21 22:44:36

37

我看你已經有一個有效的解決方案,但只是爲了好玩,與array_map善良:

$array = array_filter(array_map('array_filter', $array)); 
+1

不,這是魔法! – 2012-02-18 04:41:15

+7

的確是黑魔法!我應該指出,這隻適用於嵌套數組。 reg數組只需要沒有回調的array_filter()。 – 2012-03-13 14:55:04

+2

這是有效的,因爲「如果沒有提供回調(對array_filter),所有等於FALSE的數組條目將被刪除」(來自手冊)。此外,@MattK說。 – 2014-04-01 16:40:39

0
//Check Array Remove Empty Key 
$ixx=0; $ix=0;//Set Array First. 
while(end(array_keys($a1))>=$ix){ //Check Last Key in Array 
if($a1[$ix]!=""){ //Check Empty Key 
    $ax[$ixx]=$a1[$ix];$ixx++; } //Remove Empty Key 
$ix++; 
} 
//End Check Array Remove Empty Key 

print_r($ax);//Print Array After remove Empty Key 
+0

這並沒有真正解決處理嵌套數組(數組數組)的問題。 – femtoRgon 2012-10-10 21:21:44

0

對於任何人誰是尋找清潔變量,它是一個簡單的數組或多維數組這裏(未知深度嵌套數組)是我建議的解決方案: (它被創建爲一個類中的靜態函數,但也可以工作在類外部 - >只是刪除自::)

public static function clean($Array, $Strict=true) 
    { 
     if(! is_array($Array)) 
     { 
      return $Array; 
     } 
     $cleaned = array(); 

     foreach ($Array as $key => $value) 
     { 
      if($Strict) 
      { 
       if(!empty($value)) 
       { 
        $tmp = self::clean($value,$Strict); 
        if(!empty($tmp)) 
        { 
         $cleaned[$key] = $tmp; 
        } 
       } 
      }//strict 
      else 
      { 
       if(is_array($value)) 
       { 
        if(!empty($value)) 
        { 
         $tmp = self::clean($value,$Strict); 
         if(!empty($tmp)) 
         { 
          $cleaned[$key] = $tmp; 
         } 
        } 
       } 
       elseif(strlen($value) > 0) 
       { 
        $tmp = self::clean($value,$Strict); 
        if(strlen($tmp) > 0) 
        { 
         $cleaned[$key] = $tmp; 
        } 
       } 
      }//not strict 
     } //end foreach 

     return $cleaned; 
    } 

希望省時間:)乾杯