【发布时间】:2021-12-29 14:51:41
【问题描述】:
我有一个数组,每次都需要包含相同的数据键,是否可以在给定以下数组的情况下添加设置为 0 的缺失键?
我正试图接受它并制作这个:
[
{
"name": "7:00 AM",
"data": [
{
"x": "2019",
"y": 1
},
{
"x": "2020", // Added
"y": 0 // Added
},
{
"x": "2021", // Added
"y": 0 // Added
}
]
},
{
"name": "8:00 AM",
"data": [
{
"x": "2019",
"y": 69
},
{
"x": "2020",
"y": 4
},
{
"x": "2021",
"y": 221
}
]
},
{
"name": "9:00 AM",
"data": [
{
"x": "2019",
"y": 6
},
{
"x": "2020",
"y": 2
},
{
"x": "2021", // Added
"y": 0 // Added
}
]
}
]
所以基本上最长的data 数组在8:00 AM 时隙中,我正在尝试将那些丢失的数据点添加到其他时隙中,默认值为0
编辑:这是我必须生成的第一个数组:
我正在使用 Laravel 并使用以下内容查询数据库:
$shipments = Orders::whereNotNull('shipped_at')->groupBy(DB::raw('YEAR(created_at)'))->selectRaw('count(*) as count, HOUR(shipped_at) as hour')->selectRaw("DATE_FORMAT(created_at, '%Y') label")->orderBy('label')->orderBy('hour')->groupBy('hour')->get();
然后我像这样格式化数组,只是不确定如何添加那些丢失的键:
$shipping_chart_year = [];
foreach ($shipments as $item) {
$hour = Carbon::parse($item['hour'] . ':00:00')->timezone('America/Chicago')->format('g:i A');
$shipping_chart_year[] = ['name' => $hour, 'data' => [['x' => $item['label'], 'y' => $item['count']]]];
}
$shipping_chart_year = collect($shipping_chart_year)
->groupBy('name')
->transform(function ($items, $name) {
// Merge nested arrays into one
$data = $items->map(function ($item) {
return $item['data'][0];
})->toArray();
return [
'name' => $name,
'data' => $data,
];
})
->values()
->toArray();
【问题讨论】:
-
你的函数/循环在哪里?我们看到了您的预期结果,但您尝试了什么?
-
@Zak 用当前代码更新了我的问题以生成原始数组。