【发布时间】:2021-09-13 16:26:01
【问题描述】:
我正在尝试格式化一个数组,如果它没有特定的 id,我会尝试将数据分配为 0。但它没有发生。
我面临的问题是,当我尝试添加 $dataset[$label['id']]['data'][] = 0 时,如果它是空的或在主数组 $array 的标签对象中找不到它,它就不起作用。
我有以下数组:
$array = '[{
"id": 26,
"name": "Tactical",
"count": 127,
"labels": {
"2": {
"id": 2,
"risk": "Medium",
"count": 80
},
"1": {
"id": 1,
"risk": "Low",
"count": 39
},
"3": {
"id": 3,
"risk": "High",
"count": 8
}
}
},
{
"id": 14,
"name": "Citizen Safety",
"count": 116,
"labels": {
"4": {
"id": 4,
"risk": "Extreme",
"count": 7
},
"2": {
"id": 2,
"risk": "Medium",
"count": 103
},
"3": {
"id": 3,
"risk": "High",
"count": 6
}
}
},
{
"id": 25,
"name": "Strategic",
"count": 79,
"labels": {
"2": {
"id": 2,
"risk": "Medium",
"count": 40
},
"1": {
"id": 1,
"risk": "Low",
"count": 11
},
"3": {
"id": 3,
"risk": "High",
"count": 28
}
}
}
]';
这里是我正在尝试的代码的 sn-p
$labels = [];
$dataset = [];
foreach ($array as $key => $value) {
$labels[] = $value['name'];
foreach ($value['labels'] as $label) {
if (empty($dataset[$label['id']])) {
$dataset[$label['id']] = [
'label' => $label['risk'],
'backgroundColor' => '#FF9534'
];
$dataset[$label['id']]['data'] = [];
$dataset[$label['id']]['data'][] = $label['count'];
} else {
if (empty($dataset[$label['id']]['data'])) {
$dataset[$label['id']]['data'][] = 0;
} else {
$dataset[$label['id']]['data'][] = $label['count'];
}
}
}
}
$dataset = [
'labels' => $labels,
'datasets' => $dataset,
];
echo json_encode($dataset);
die;
我得到以下输出
{
"labels": [
"Tactical",
"Citizen Safety",
"Strategic"
],
"datasets": {
"2": {
"label": "Medium",
"backgroundColor": "#FF9534",
"data": [
80,
103,
40
]
},
"1": {
"label": "Low",
"backgroundColor": "#FF9534",
"data": [
39,
11
]
},
"3": {
"label": "High",
"backgroundColor": "#FF9534",
"data": [
8,
6,
28
]
},
"4": {
"label": "Extreme",
"backgroundColor": "#FF9534",
"data": [
7
]
}
}
}
但我想要的实际输出是下面的一个
{
"labels": [
"Tactical",
"Citizen Safety",
"Strategic"
],
"datasets": {
"2": {
"label": "Medium",
"backgroundColor": "#FF9534",
"data": [
80,
103,
40
]
},
"1": {
"label": "Low",
"backgroundColor": "#FF9534",
"data": [
39,
0,
11
]
},
"3": {
"label": "High",
"backgroundColor": "#FF9534",
"data": [
8,
6,
28
]
},
"4": {
"label": "Extreme",
"backgroundColor": "#FF9534",
"data": [
0,
7,
0
]
}
}
}
我的意思是当我循环遍历来自$array 数组对象的标签时,当任何数组对象都没有标签对象(如中、低、高、极端)时,我试图将计数分配为 0,即没有发生在响应中。有人可以帮我解决我在这里缺少的东西吗?
你可以在这里查看代码的执行https://sandbox.onlinephpfunctions.com/code/398b2d1aa892e898a72fb053e981519e3215a053
【问题讨论】:
-
我看不出这些输出之间有什么区别。而不是说“这就是我想要的”并期望我们玩“找出差异”,您应该描述您想要的,它可能会帮助您找出过程中的问题。
-
@miken32 请检查屏幕截图以获得澄清,我希望这能让您了解我正在尝试做什么
-
@NicoHaase 如果您看到此链接sandbox.onlinephpfunctions.com/code/…,您可以看到我尝试过的每个循环都有一个
-
请通过编辑将所有尝试添加到此问题。另外,分享您尝试解决问题的方法
标签: php arrays laravel foreach