[英]How to add missing keys to array
我有一個每次都需要包含相同數據鍵的數組,是否可以在給定以下數組的情況下添加設置為 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();
function getAllYears(array $array): array
{
$allKeys = [];
foreach ($array as $data) {
foreach ($data['data'] as $years) {
if (!in_array($years['x'], $allKeys, true)) {
$allKeys[] = $years['x'];
}
}
}
sort($allKeys);
return $allKeys;
}
function addMissingKeys(array $array): array
{
$allYears = getAllYears($array);
foreach ($array as $key => $data) {
$currentYears = array_map(static function ($year) {
return $year['x'];
}, $data['data']);
$yearToAdd = array_diff($allYears, $currentYears);
foreach ($yearToAdd as $year) {
$array[$key]['data'][] = [
'x' => $year,
'y' => 0,
];
}
}
return $array;
}
$array = [
[
"name" => "7:00 AM",
"data" => [
[
"x" => "2019",
"y" => 1
]
]
],
[
"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
]
]
]
];
$array = addMissingKeys($array);
var_dump($array);
您可以在此處查看此代碼的結果: https://sandbox.onlinephpfunctions.com/code/2c58df4749126199bf21357d1c615634a0ebd629
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.