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


How do I remove the nulls out of the inner PHP array

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

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

I tried array_filter($quantity);

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

,甚至用$quantity[0]尝试foreach,得到未定义的偏移量0。什么好主意吗?

这是有效的,但如果我没有227

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

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

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

您的值似乎都是空白的——要么是常规空格,要么可能是unicode字符。试试trim($value) == ""

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

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

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

我在这种情况下使用如下代码:

<?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或空字符串块。

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