如何从内部PHP数组中删除空值

时间:2011-09-13 00:53:10

标签: php arrays

我有一个数组,我需要从中删除null值:

 [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.任何想法?

更新

这有效但如果我没有227

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

4 个答案:

答案 0 :(得分:2)

这看起来像一个嵌套数组 - 你的foreach语句看起来正确,但需要检查内部数组:

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

答案 1 :(得分:1)

您似乎拥有全部为空白的值 - 常规空格或可能是unicode字符。试试trim($value) == ""

如果这不起作用array_filter($array, "is_integer");可能会有效。

答案 2 :(得分:1)

您更新了解决方案。关于硬编码227的部分是因为$quantity是一个多维数组(额外的右括号也暗示了这一点)。你需要为它做嵌套的foreach

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

答案 3 :(得分: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或空字符串块。

(编辑:添加真正低级别的解释:循环遍历数组,如果它在该数组中找到一个数组,它会调用自身并重复该过程。)