You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DB::select()返回的对象数组转为数组数组?

解决方案:将Laravel原生查询的对象数组转为纯数组数组

针对你遇到的Laravel原生查询返回stdClass对象数组,想要转为纯关联数组数组的需求,尤其是大数据集下的性能问题,这里有几个更高效的处理方式:

1. 直接让查询返回关联数组(最优解)

不需要后续转换,直接让PDO以关联数组格式返回结果,这是性能最高的方案——跳过了对象实例化和转换的额外开销:

// 原生查询时指定PDO获取模式为FETCH_ASSOC
$data = DB::select('SELECT v FROM your_table', [], \PDO::FETCH_ASSOC);

这样$data直接就是你想要的array:999 [0 => ["v" => 1], ...]格式,完全不需要额外处理,大数据集下的性能提升非常明显。

2. 优化现有转换方式(如果必须处理对象数组)

如果因为某些原因无法修改查询的获取模式,你的foreach和array_map方法其实已经是PHP里比较高效的方式了,但可以用PHP内置函数简化array_map的写法:

$arr = array_map('get_object_vars', $data);

get_object_vars()是原生内置函数,比自定义匿名函数的性能略好一点,但本质上和你原来的方法差异不大,还是不如直接指定PDO模式高效。

补充说明

  • Laravel的DB::select()默认使用PDO::FETCH_OBJ模式返回stdClass对象,手动指定PDO::FETCH_ASSOC就能直接得到关联数组。
  • 如果是使用查询构造器而非原生SQL,也可以直接调用->get()->toArray()来得到数组数组,但原生查询场景下,指定PDO模式是更直接的方案。

内容的提问来源于stack exchange,提问作者Tarasovych

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:32:42