如何忽略或删除集合中数组中的空元素

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

我想从这个集合中删除第二个键/值元素。我该如何做到这一点?

1
或者查看array_filter() - Nico Haase
5个回答

12

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

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

为了补充之前使用 Collection@filter 的回答


1
这并不会删除 null 条目,它会删除与 false 松散等效的条目,例如:[]0false''null 都将被删除。 - FullStackFool

9
您可以使用 $collection->filter(); 来移除 null 值。
$filtered = $collection->filter(function ($value, $key) {
    return $value != null;
});

请查看文档

4
过滤空值时不需要添加回调函数。执行$filtered = $collection->filter()同样有效。 - Raza Mehdi
这将返回空数组 []。 - saber tabatabaee yazdi

1

使用filter方法来去除可空值,然后使用values方法重置数组键(如果需要的话)。

$collectionFiltered = $collection->filter()->values();


1
这并不会删除 null 条目,它会删除与 false 松散等效的条目,例如:[]0false''null 都将被删除。 - FullStackFool

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 !== ''; }));

1
如果您仅从集合中严格删除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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接