仅从多维数组中删除空值

时间:2016-06-02 21:22:15

标签: php arrays null

我想只删除非空值而不是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));

但仍然失败。

3 个答案:

答案 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,并且该元素将从数组中删除。