【发布时间】:2017-05-24 22:45:00
【问题描述】:
我希望根据其键将数组分组为子数组。
样本数组
Array
(
[0] => Array
(
[a_id] => 1
[a_name] => A1
[b_id] => 1
[b_name] => B1
[c_id] => 1
[c_name] => C1
)
[1] => Array
(
[a_id] => 1
[a_name] => A1
[b_id] => 1
[b_name] => B1
[c_id] => 2
[c_name] => C2
)
[2] => Array
(
[a_id] => 1
[a_name] => A1
[b_id] => 2
[b_name] => B2
[c_id] => 3
[c_name] => C3
)
[3] => Array
(
[a_id] => 2
[a_name] => A2
[b_id] => 3
[b_name] => B3
[c_id] => 4
[c_name] => C4
)
)
我需要将此示例数组转换为以下格式的 JSON 数组:
预期输出
[{
"a_id": 1,
"a_name": "A1",
"b_list": [{
"b_id": 1,
"b_name": "B1",
"c_list": [{
"c_id": 1,
"c_name": "C1"
}, {
"c_id": 2,
"c_name": "C2"
}]
}, {
"b_id": 2,
"b_name": "B2",
"c_list": [{
"c_id": 3,
"c_name": "C3"
}]
}]
}, {
"a_id": 2,
"a_name": "A2",
"b_list": [{
"b_id": 3,
"b_name": "B3",
"c_list": [{
"c_id": 4,
"c_name": "C4"
}]
}]
}]
我可以使用下面的代码按一个键进行分组。
$array = array(
array("a_id" => "1","a_name" => "A1","b_id" => "1","b_name" => "B1","c_id" => "1","c_name" => "C1"),
array("a_id" => "1","a_name" => "A1","b_id" => "1","b_name" => "B1","c_id" => "2","c_name" => "C2"),
array("a_id" => "1","a_name" => "A1","b_id" => "2","b_name" => "B2","c_id" => "3","c_name" => "C3"),
array("a_id" => "2","a_name" => "A2","b_id" => "3","b_name" => "B3","c_id" => "4","c_name" => "C4")
);
$return = array();
foreach($array as $val) {
$return[$val["a_id"]][] = $val;
}
print_r($return);
但是我的实际场景涉及到分组到子数组中并没有奏效。
期待看看是否有优化的方式或有用的功能可以进入我预期的 JSON 响应。
注意:我在这里研究一个通用的用例。例如:a_list 代表国家,b_list 代表州,c_list 代表城市。
【问题讨论】:
-
你能让你的输入和预期输出尽可能小吗?所以更容易理解你期望的行为?
-
那是……相当有趣和令人费解的。 @TomasZubiri 这几乎是最小的样本。据了解,这个分组有很多细节。
-
@SurabhilSergy 是的,有几个,但现在没有时间。它意味着某种递归。几个小时后会试一试
-
@FélixGagnon-Grenier 你有机会调查这个吗?
-
@SurabhilSergy 抱歉,我很懒,你有我可以在 php 中使用来测试解决方案的数组的实际代码示例吗?现在我必须手动输入所有数据:D
标签: php arrays json optimization multidimensional-array