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