【发布时间】:2018-11-16 16:02:14
【问题描述】:
我需要根据特定规则将简单数组转换为嵌套数组。我已经实现了,但我正在寻找更好的解决方案。
简单:
array(4) {
[0]=>
array(2) {
["id"]=>
string(2) "11"
["type"]=>
int(3)
}
[1]=>
array(2) {
["id"]=>
string(2) "10"
["type"]=>
int(2)
}
[2]=>
array(2) {
["id"]=>
string(1) "1"
["type"]=>
int(1)
}
[3]=>
array(2) {
["id"]=>
string(1) "0"
["type"]=>
int(1)
}
}
预期效果:
array(1) {
[0]=>
array(2) {
["type"]=>
int(1)
["child"]=>
array(1) {
[1]=>
array(2) {
["type"]=>
int(1)
["child"]=>
array(1) {
[10]=>
array(2) {
["type"]=>
int(2)
["child"]=>
array(1) {
[11]=>
array(2) {
["type"]=>
int(3)
["child"]=>
array(0) {
}
}
}
}
}
}
}
}
}
我的解决方案(不是很满意):
$nestedArray = [];
foreach ($simpleArray as $item)
{
if (!empty($nestedArray))
{
$array = $nestedArray;
reset($array);
$firstKey = key($array);
}
$nestedArray[$item['id']]['child'] = $nestedArray;
$nestedArray[$item['id']]['type'] = $item['type'];
if (!empty($firstKey))
{
unset($nestedArray[$firstKey]);
}
}
正如我所说,我正在寻找更优雅的方式来实现这一目标。规则非常简单:每个下一个项目都是前一个的子项。
【问题讨论】:
-
那么告诉我们:这里的“不太令人满意”是什么?没有这个,你怎么指望我们提出“更令人满意”的建议?
-
示例输入和输出是否相互关联?我看不出他们的价值观如何匹配......“id”去哪里了?如果有的话,你的最后一段描述的是相反的:每个下一个元素都是上一个(不是孩子)的父级......或者我错过了什么?
-
我尽我所能,但我认为我的解决方案非常...基本。第一个数组与第二个数组相关。第一个数组的第一个元素是第二个数组最嵌套的元素。
标签: php arrays multidimensional-array converter