我有一个数组,我需要从中删除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或空字符串块。
(编辑:添加真正低级的解释:循环遍历数组,如果它在该数组中找到一个数组,它调用自己并重复该过程。)