如何忽略或从集合内的数组中删除null元素

时间:2017-12-07 10:24:14

标签: php laravel

Collection {#363 ▼
  #items: array:3 [▼
    0 => Tag {#376 ▶}
    1 => null
    2 => Tag {#374 ▶}
  ]
}

我想从此集合中删除第二个键/对元素,我该如何实现...谢谢

4 个答案:

答案 0 :(得分:5)

您可以使用$collection->filter();删除空值。

$filtered = $collection->filter(function ($value, $key) {
    return $value != null;
});

请参阅documentation

答案 1 :(得分:2)

此外,Collection@filter将删除null,而无需使用任何闭包进行检查。与array_filter删除null的方式类似。

$filtered = $collection->filter();
// nulls will be removed

使用Collection@filter

补充上一个答案

答案 2 :(得分:1)

当你处理一个字符串数组时,你可以简单地使用array_filter(),它可以方便地为你处理所有这些:

print_r(array_filter($linksArray));

请记住,如果没有提供回调,则将删除数组的所有条目等于FALSE(请参阅转换为布尔值)。因此,如果您需要保留精确字符串为“0”的元素,则需要自定义回调:

// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));

// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return $value !== ''; }));

答案 3 :(得分:0)

如果从集合中严格删除仅NULL值而不删除零(0)。 例如:[10,10,0,9,null]

$filtered = $collection->filter(function($value, $key) {
            return !is_null($value);
        });

输出:[10,10,0,10]

正如其他人所说,您可以使用不带回调的filter()方法来删除等于FALSE([],0,NULL,FALSE,'')的值

官方文档:https://laravel.com/docs/8.x/collections#method-filter