2011-09-13 62 views
1

我有一個數組從我需要刪除null值:如何刪除空值從內PHP的陣列

[227] => Array 
    (
     [0] => 3 
     [1] => 8 
     [2] => 
     [3] => 
     [4] => 1 
    ) 

) 

我試圖array_filter($quantity);

foreach ($quantity as $key => $value) { 
    if (is_null($value) || $value=="") { 
     unset($quantity); 
    } 
} 

甚至嘗試foreach$quantity[0]並得到未定義偏移0.任何想法?

UPDATE

這工作,但如果我沒有這個227

foreach ($quantityval[227] as $key => $value) { 
    if (is_null($value) || trim($value)=="") { 
     unset($quantityval[227][$key]); 
    } 
} 
+0

我看了看這個問題和array_filter犯規解決問題...看看我的問題 – Trace

回答

2

這看起來像一個嵌套的數組 - 您的foreach語句看起來是正確的,但需要檢查內部數組:

foreach ($quantity as $key => $item) 
    foreach ($item as $key2 => $item2) { 
     if (is_null($item2) || $item2=="") { 
      unset($quantity[$key][$key2]); 
     } 
    } 
} 
1

你似乎有都是白色的空間值 - 無論是常規的空間或可能Unicode字符。嘗試trim($value) == ""

如果這不起作用array_filter($array, "is_integer");可能會伎倆。

+0

空值打印就像那樣,所以它不一定是空格。 'print_r(array(227 => array(3,8,null,null,1)));' – icktoofay

+0

這是公平的,但是當它與代碼結合使用時,我想不出其他任何東西除了空白之外。 –

+0

用硬編碼的東西更新了我的問題,但如果我沒有227 – Trace

1

您更新解決方案的工作。關於硬編碼227的部分是因爲$quantity是一個多維數組(多餘的右括號也暗示了這一點)。你需要爲此嵌套foreach

foreach($bigArray as $bigKey => $smallArray) 
{ 
    foreach($smallArray as $smallKey => $value) 
    { 
    if(is_null($value) || $value == "") 
     unset($bigArray[$bigKey][$smallKey]); 
    } 
} 
0

我使用這樣的情況下,這樣的:

<?php 
function filter_empty_recursive($arr) 
{ 
    $keys = array_keys($arr); 
    foreach($keys as $key) 
    { 
     if(is_array($arr[$key])) 
     { 
      $arr[$key] = filter_empty_recursive($arr[$key]); 
     } 
     else if(empty($arr[$key])) 
     { 
      unset($arr[$key]); 
     } 
    } 
    return $arr; 
} 

這是一個遞歸函數(因此它可以與大型嵌套數組樹木內存有點殘酷,這尤其是一個無法處理無限遞歸(即:循環引用)。)但是,對於非無限遞歸和合理大小的嵌套數組樹,它應該工作得很好。它也可以被擴展來處理嵌套的對象屬性,但這似乎超出範圍。它決定它是否爲空的部分是if(empty()),因此您可以將其更改回is_null或空字符串塊。

(編輯:添加非常低級別的解釋:遍歷數組,如果發現數組的一個數組裏面,它調用本身並重復此過程)