php - 如何使用 php json 创建正确的维度数组
问题描述
我有两张桌子,汽车和供应商
table: Car
---------------------------
| carID | carBrand |
---------------------------
| 1 | Volvo |
---------------------------
| 2 | BMW |
---------------------------
| 3 | Mercedes |
---------------------------
table: Vendor
----------------------------------------------------
| vendorID | vendorName | telephone | carID |
----------------------------------------------------
| 1 | Jusoh Trading | 12345 | 1 |
----------------------------------------------------
| 2 | Ibrahim and Sons | 34566 | 1 |
----------------------------------------------------
| 3 | GMC Auto | 566444 | 2 |
----------------------------------------------------
| 4 | Perodua Services | 456666 | 3 |
----------------------------------------------------
| 5 | AMG Specs | 5666 | 3 |
----------------------------------------------------
我使用 sql 查询(codeigniter)使用 json 生成输出。通过使用输出,我将创建一个图表,这是我的插件所需的数组格式。我使用上面的 sql & json 编码的成功输出如下:
[
{
"carBrand": "Volvo",
"carID": "1"
},
[
{
"vendorID": "1",
"vendorName": "Jusoh Trading"
},
{
"vendorID": "2",
"vendorName": "Ibrahim and Sons"
}
],
{
"carBrand": "BMW",
"carID": "2"
},
[
{
"vendorID": "3",
"vendorName": "GMC Auto"
}
],
{
"carBrand": "Mercedes",
"carID": "3"
},
[
{
"vendorID": "4",
"vendorName": "Perodua Services"
},
{
"vendorID": "5",
"vendorName": "AMG Specs"
}
]
]
我生成输出的代码:
$data = array();
$this->db->select("carBrand, carID");
$this->db->from('car');
$query = $this->db->get();
$result = $query->result();
foreach ($result as $row):
$data[] = $row;
$this->db->select("vendorID, vendorName");
$this->db->from('vendor');
$this->db->where('carID',$row->carID);
$query = $this->db->get();
$res = $query->result();
$child = array();
foreach ($res as $val):
$child[] = $val;
endforeach;
array_push($data, $child);
endforeach;
echo json_encode($data);
exit;
但我的问题是,地图插件需要一些不同的格式。我需要稍微改变一下我的输出格式。我需要的确切格式如下:
[
{
"carBrand": "Volvo",
"vendorlist": [
{
"vendorID": "1",
"vendorName": "Jusoh Trading"
},
{
"vendorID": "2",
"vendorName": "Ibrahim and Sons"
}
]
},
{
"carBrand": "BMW",
"vendorlist": [
{
"vendorID": "3",
"vendorName": "GMC Auto"
}
]
}
# .. other data .. #
];
我需要删除“carID”并添加“vendorlist”..我需要修改我的代码的建议。谢谢你
解决方案
$json = '[
{
"carBrand": "Volvo",
"carID": "1"
},
[
{
"vendorID": "1",
"vendorName": "Jusoh Trading"
},
{
"vendorID": "2",
"vendorName": "Ibrahim and Sons"
}
],
{
"carBrand": "BMW",
"carID": "2"
},
[
{
"vendorID": "3",
"vendorName": "GMC Auto"
}
],
{
"carBrand": "Mercedes",
"carID": "3"
},
[
{
"vendorID": "4",
"vendorName": "Perodua Services"
},
{
"vendorID": "5",
"vendorName": "AMG Specs"
}
]
]';
$narr = [];
$arr = json_decode($json,true);
foreach($arr as $k => $v)
{
if( $k%2 == 0)
{
$narr[] = ['carBrand' => $v['carBrand'] , 'vendorlist' => $arr[$k+1]];
}
}
$new_json = json_encode($narr);
推荐阅读
- python - VsCode Python“运行代码”与“在终端中运行 Python 文件”
- azure - Azure 函数的 IP 地址超出了 VNet 的范围
- python - Discord.py:在 cog 中调用时,主文件中的函数“未定义”
- python - 如何根据行号将不同的行连接到一个最终字符串中
- javascript - 高级图表 - 组织结构图
- ios - Swift 结合从 AnyPublisher 获取自定义对象
- c# - IsPersistent 不工作 PasswordSignInAsync 身份 asp.net 核心
- batch-file - 我的文件路径是否太长,因此我无法使用 .bat 创建文件?
- python - 将两列除以两列
- c# - Xamarin iOS 项目中的 BindableRadioGroup