【发布时间】:2020-07-02 12:50:11
【问题描述】:
我正在从 Google Charts 准备数据,但无法为 Google Charts 创建格式化数据数组。
我有这种格式的对象数组:
[
{
"total_amount": 6572.67,
"o_date": "2020-06-01",
"storeName": "Store1"
},
{
"total_amount": 314.21,
"o_date": "2020-06-01",
"storeName": "Store2"
},
{
"total_amount": 5550.34,
"o_date": "2020-06-02",
"storeName": "Store1"
},
{
"total_amount": 461.87,
"o_date": "2020-06-02",
"storeName": "Store2"
},
{
"total_amount": 6471.37,
"o_date": "2020-06-03",
"storeName": "Store1"
},
{
"total_amount": 547.99,
"o_date": "2020-06-03",
"storeName": "Store2"
},
]
Google Chart 需要这种格式的数据:
['Store', 'Store1', 'Store2', { role: 'annotation' } ],
['2020-06-01', 6572.67, 314.21, ''],
['2020-06-02', 5550.34, 461.87, ''],
['2020-06-03', 6471.37, 547.99, '']
我尝试了不同的方法在 foreach 循环中创建新数组,但无法格式化数组。 谁能建议我正确的方法? 谢谢。
更新
谢谢大家的cmets和答案。
是的,我正在使用 PHP/Laravel。
要从数据库中获取订单,我的查询是:
$orders = $orders->select(DB::raw('SUM(orders.quantity) as total_quantity'), DB::raw('SUM(orders.totalAmount) as total_amount'), DB::raw('count(orders.id) as count'), DB::raw("DATE_FORMAT(date, '%Y-%m-%d') as o_date"), 'storeName')->groupBy('o_date', 'storeName')->get()->toArray();
上面的查询返回上面提到的对象数组。比我使用 foreach 循环提取的唯一日期。
foreach($orders as $order)
{
if(!in_array($order->o_date, $dates))
{
array_push($dates, $order->o_date);
}
}
然后我像这样遍历所有日期
foreach($dates as $date)
{
$dataArray[] = [$date];
foreach($orders as $order)
{
if($order->storeName == $store && $order->o_date == $date)
{
$dataArray[] = [$date, $order->total_amount];
}
}
}
上面的代码是错误的。数组中的第一个元素应该是 date,第二个元素应该是 total_amount for store1,第三个元素应该是 total_amount for store2,如下所示
['2020-06-01', 6572.67, 314.21, ''],
['2020-06-02', 5550.34, 461.87, ''],
['2020-06-03', 6471.37, 547.99, '']
注意:- 我正在为Google Stacked Column Chart准备数据
【问题讨论】:
-
好的,那么你是如何像你一样格式化数据的,你是用 PHP 做的吗?如果是这样,请告诉我们
-
请展示您的尝试并描述出了什么问题。那么至少我们有一个起点,可以尝试修复它。
-
此外,您的数据与您声称的 Google 想要的数据不同
-
我认为 OP 知道 @KunalRaut 问题是关于以特定 JSON 格式获取数据,而 OP 未能实现这一点
-
请给我们看代码