2012-03-05 17 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 
}