>我想只删除空值不空不 0。 我的数组看起来像这样
[hrg_children] => Array
(
[0] => Array
(
[col1] => 123
[col2] => 1
[col3] =>
[col4] =>
[col5] =>
[col6] =>
[col7] =>
[col8] =>
[col9] =>
[col10] =>
[col11] =>
[col12] =>
[col13] =>
[col14] =>
[hrg_lid] => 1464902183
)
)
我已经尝试过的代码。
array_filter(array_map('array_filter', $gcmArray));
但仍然失败了。
使用带有严格比较 (===
) 或 is_null()
函数的 foreach。
foreach($array as $key=>$value)
if($value === null )
unset($array[$key]);
如果你只是想深入一层,你可以使用地图和过滤器。
// Map over the first level (you're missing this bit)
$array = array_map(function ($item) {
// Then filter the values. All values where the callback returns
// true are returned and kept by our map. Hence the ! is_null
return array_filter($item, function ($value) {
return ! is_null($value);
});
}, $array);
如果你想更深入,你需要递归,以便你可以使用类似于下面的东西。
function recursive_unset(array $array, callable $callback) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$array[$key] = recursive_unset($value, $callback);
} else {
if ($callback($value, $key)) {
unset($array[$key]);
}
}
}
return $array;
}
var_dump(recursive_unset($gcmArray, function ($value) {
return is_null($value);
}));
显然您错误地使用了array_filter函数。
请访问 http://php.net/manual/en/function.array-filter.php 以获取文档。
它应该是这样的
array_filter($yourArrayToFilter, function($value) {
return (is_null($value))? false : true;
});
这意味着对于数组的每个元素,如果值为 null,则该函数将返回 false,并且该元素将从数组中删除。