Laravel Collection->toArray()转数组时如何保留null值
Laravel Collection转数组保留null值方案
Laravel 原生的集合转数组方法默认就会完整保留null值,不需要额外写特殊逻辑,你搜到的忽略null的操作,都是主动调用过滤方法后的效果。
原生可用的默认方法
下面两个内置方法转数组时都不会过滤null,直接调用即可:
toArray():最通用的转数组方案,会递归将集合内嵌套的Collection、实现了Arrayable接口的对象全部转成数组,所有层级的null值都会完整保留$demoCollection = collect([ 'username' => 'admin', 'avatar' => null, 'remark' => null, 'roles' => collect([null, 'editor', 'visitor']) ]); $array = $demoCollection->toArray(); // 最终结果中avatar、remark、roles下的第一个null都会被保留,不会被自动剔除all():直接返回集合底层存储的原始数组,不会做递归转换,一维集合场景下用这个性能更好,同样不会过滤任何null值$array = $demoCollection->all();
为什么会出现null被过滤的情况
如果你自己写代码时遇到转数组丢null的问题,基本都是以下原因导致的,和转数组方法本身无关:
- 转数组前链式调用了无参数的
filter()方法:无回调的filter()默认会过滤掉所有等值为false的元素,包括null、空字符串、0、false、空数组// 这种写法才会丢失null,只要不主动调用filter就不会出现这个问题 $filteredArray = $demoCollection->filter()->toArray(); - 调用了自定义过滤逻辑:比如
reject()、自定义回调的filter()里写了排除null的判断 - 模型集合场景下,检查Model里是否配置了自动剔除空值的属性修改器,或者全局查询作用域加了非空约束
内容的提问来源于stack exchange,提问作者kaskenades
相关产品推荐
相关产品推荐

