2012-03-05 46 views
5

我有一個數組,它有大約12個潛在的鍵/值對。這是基於一個_POST/_GETPHP刪除空,空的數組鍵/值,同時保持鍵/值,否則不是空/空

鍵是不是數字,因爲在0-n,我需要在適用的情況下保留具有值的鍵。我的問題是,我知道有時會在值爲空,空或等於''的地方傳遞一個密鑰。在這種情況下,我想在處理我的數組之前刪除這些鍵。由於沒有任何東西就會導致線路崩潰,這將會破壞我的腳本。

現在一段時間後,我發現或者發現了這個功能(雖然我不記得它在我的武器庫裏哪一段時間了,但是不管怎麼樣)。

function remove_array_empty_values($array, $remove_null_number = true) 
    { 
     $new_array = array(); 
     $null_exceptions = array(); 
     foreach($array as $key => $value) 
     { 
      $value = trim($value); 
      if($remove_null_number) 
      { 
       $null_exceptions[] = '0'; 
      } 
      if(!in_array($value, $null_exceptions) && $value != "") 
      { 
       $new_array[] = $value; 
      } 
     } 
     return $new_array; 
    } 

我很想做的是非常相似,這一點,但是這個效果很好用,可以有NN鍵值數組,我不依賴於密鑰和值,以確定什麼什麼地方和什麼時候。如上所述,只需刪除所有內容,然後重新構建數組。我卡在哪裏試圖弄清楚如何模仿上述功能,但是我保留我需要的鍵。

+1

除非我誤解的要求,也就是['array_filter()'](HTTP的確切功能: //us3.php.net/manual/en/function.array-filter.php) – 2012-03-05 14:14:14

+0

[從PHP數組中刪除零值]的可能重複(http://stackoverflow.com/questions/2287404/remove-zero- values-from-a-php-array) – hakre 2012-03-05 14:38:52

回答

10

如果我理解正確的話你以後,你可以使用array_filter()或者你可以做這樣的事情:

foreach($myarray as $key=>$value) 
{ 
    if(is_null($value) || $value == '') 
     unset($myarray[$key]); 
} 
+1

您可能希望使用'if(empty($ value))'更全面。 – 2012-03-05 14:20:21

+0

@GeorgeCummins:同意,這是一個選項。在內部,它做同樣的事情 - 對不對? – 2012-03-05 14:21:24

+0

'empty()'更全面,因爲它還檢查0,假,「0」,0.0,空數組等等。它也更容易閱讀和維護。 – 2012-03-05 14:23:01

4

array_filter是一種內置功能,可以完全滿足您的需求。最多你需要提供自己的回調函數,以決定哪些值保留,哪些值被刪除。正如功能描述所述,這些鍵將被自動保存。

例如:

// This callback retains values equal to integer 0 or the string "0". 
// If you also wanted to remove those, you would not even need a callback 
// because that is the default behavior. 
function filter_callback($val) { 
    $val = trim($val); 
    return $val != ''; 
} 

$filtered = array_filter($original, 'filter_callback'); 
6

如果你想有一個快速的方法來刪除NULL,FALSE和空字符串(「」),但保留值爲0(零),則可以使用標準php函數strlen作爲回調函數:

// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values 
$result = array_filter($array, 'strlen'); 

來源:http://php.net/manual/en/function.array-filter.php#111091

0

使用1與你的關鍵變量跳過空鍵以陣列

foreach($myarray as $key=>$value) 
{ 
    echo $key+1; //skip null key 
}