Laravel 5.6:如何仅返回含有效值数组并过滤空数组
在Laravel 5.6中过滤数组中的NULL值
嘿,在Laravel 5.6里实现仅保留有效值、过滤掉NULL值的数组其实很容易,我给你分享几个实用的方案,根据你的数组结构选就行:
方案1:使用Laravel集合(推荐)
Laravel的集合类提供了非常便捷的数组操作方法,处理这种过滤需求特别顺手。假设你的原始数组是这样的:
$originalArray = [ 'username' => 'samtoya', 'bio' => null, 'email' => 'sam@example.com', 'phone' => null, ];
你可以通过以下代码过滤掉所有NULL值的元素:
// 转换为集合 -> 过滤NULL值 -> 转回数组 $filteredArray = collect($originalArray) ->filter(function ($value) { // 只保留非NULL的值 return !is_null($value); }) ->toArray();
如果你的数组是多维数组(比如包含子数组),想要同时过滤子数组里的NULL值,还可以嵌套使用集合:
$originalMultiArray = [ ['id' => 1, 'title' => 'First Post', 'content' => null], null, ['id' => 2, 'title' => null, 'content' => 'Hello World'], ]; $filteredMultiArray = collect($originalMultiArray) // 先过滤掉整个为NULL的元素 ->filter(function ($item) { return !is_null($item); }) // 再处理每个子数组,过滤其中的NULL值 ->map(function ($subArray) { return collect($subArray)->filter(function ($value) { return !is_null($value); })->toArray(); }) ->toArray();
方案2:使用原生PHP函数
如果你习惯用原生PHP,array_filter也能实现,但要注意默认的array_filter会过滤掉所有“空值”(比如false、0、''这些),所以如果只想过滤NULL值,必须传入自定义回调:
$filteredArray = array_filter($originalArray, function ($value) { return !is_null($value); });
小提示
- 如果你想连空字符串、false这些也一起过滤,可以直接用
collect($originalArray)->filter()->toArray(),因为Laravel的filter()方法默认会移除所有“空”值(符合empty()判断的)。 - 要是你的数组元素是对象,只需要调整回调里的判断逻辑就行,比如判断对象的某个属性是否为NULL。
内容的提问来源于stack exchange,提问作者samtoya
相关产品推荐
相关产品推荐

