我想只删除非空值而不是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));
但仍然失败。
答案 0 :(得分:1)
使用带有严格比较(===
)或is_null()
功能的foreach。
foreach($array as $key=>$value)
if($value === null )
unset($array[$key]);
答案 1 :(得分:1)
如果您只想深入一级,可以使用地图和过滤器。
// 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);
}));
答案 2 :(得分:0)
显然你错误地使用了array_filter函数。
访问http://php.net/manual/en/function.array-filter.php获取文档。
应该是
allowed_domains = ["www.domain.com"]
def parse_1(self, response):
items = []
sites = sle(allow=(),deny = self.allowed_domains ).extract_links(response)
for link in sites:
item = MyItem()
item['url'] = link.url
item['source'] = response.url
info('Link: ' + link.url + 'ON: ' + response.url);
items.append(item)
return items
这意味着对于数组的每个元素,如果值为null,则函数将返回false,并且该元素将从数组中删除。