gpt4 book ai didi

php - Laravel 中将对象转换为数组

转载 作者:行者123 更新时间:2023-12-03 02:12:15 25 4
gpt4 key购买 nike

我查询了这样的数据库,它给了我一个数组:

foreach($oid as $orderid) {
$orderdetailData[] = DB::table('order_details')
->join('orders', 'order_details.oid', '=', 'orders.oid')
->select('order_details.oid', 'orders.ostatus')
->where('order_details.oid', $orderid)->get();
}

$data = array_flatten($orderdetailData);
return $data;

这是我得到的数组

array (size=2)
0 =>
object(stdClass)[174]
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
object(stdClass)[158]
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)

我正在尝试以表单形式获取此数组

array (size=2)
0 =>
array (size=2)
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
array (size=2)
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)

我尝试这样做:

foreach($orderdetailData as $key => $value){
$data[] = array_flatten($orderdetailData[$key]);
}

但是这样做会得到一个这种形式的数组:

array (size=2)
0 =>
array (size=1)
0 =>
object(stdClass)[174]
public 'oid' => int 1
public 'ostatus' => string 'Placed' (length=6)
1 =>
array (size=1)
0 =>
object(stdClass)[158]
public 'oid' => int 2
public 'ostatus' => string 'Placed' (length=6)

这不是我想要的。有人可以告诉我有什么简单的方法可以做到这一点吗?谢谢

最佳答案

使用 array_map 并转换为数组就足够了:

$data = array_map(function($object){
return (array) $object;
}, $data);

我也不会在循环内运行查询。您应该尝试在一次查询中从数据库获取该数据。像这样的事情可能会起作用:

$data = DB::table('order_details')
->join('orders', 'order_details.oid', '=', 'orders.oid')
->select('order_details.oid', 'orders.ostatus')
->whereIn('order_details.oid', $oid)->get();

编辑

正如另一个答案中提到的那样,让我解释一下如何通过将 PDO 设置为 FETCH_ASSOC 来完成相同的任务:

DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();

但是,这会全局更改请求其余部分的获取模式(至少在您不打开新连接的情况下)。要保存,您应该稍后将其更改回来:

DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
DB::setFetchMode(PDO::FETCH_CLASS);

如果您无法确定使用的默认值,甚至可以先备份它:

$fetchModeBefore = DB::getFetchMode();
DB::setFetchMode(PDO::FETCH_ASSOC);
$data = DB::table('order_details') .... ->get();
DB::setFetchMode($fetchModeBefore);

关于php - Laravel 中将对象转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com