【发布时间】:2019-01-29 10:41:36
【问题描述】:
我有 PHP 数组。我正在尝试转换为父子数组: 我使用了递归函数,但没有得到我的输出。
Array
(
[0] => Array
(
[id] => 1
[subscription_name] => Yearly
[parent_id] => 0
)
[1] => Array
(
[id] => 22
[subscription_name] => Yearly new
[parent_id] => 1
)
[2 => Array
(
[id] => 23
[subscription_name] => Yearly new offer
[parent_id] => 22
)
[3] => Array
(
[id] => 24
[subscription_name] => Weekly
[parent_id] => 0
)
[4] => Array
(
[id] => 25
[subscription_name] => Weekly new offer
[parent_id] => 24
)
)
我期待这个结果
Array
(
[0] => Array
(
[id] => 1
[subscription_name] => Yearly new offer
[childrens] => Array
(
[0] => Array
(
[id] => 22
)
[1] => Array
(
[id] => 23
)
)
)
[1] => Array
(
[id] => 24
[subscription_name] => Weekly new offer
[childrens] => Array
(
[0] => Array
(
[id] => 25
)
)
)
)
我尝试过但没有得到我想要的输出
我的PHP函数是
function tree(array $elements, $parent_id = 0) {
echo "<pre>";
$branch = array();
$a=array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parent_id && $element['subscription_type_id'] !=1 ) {
$children = $this->tree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
else {
$element['children'] = array();
}
$branch[] = $element;
}
}
return $branch;
}
这是我从上述函数得到的输出:
Array
(
[0] => Array
(
[id] => 1
[subscription_name] => Yearly
[children] => Array
(
[0] => Array
(
[id] => 22
[subscription_name] => Yearly new
[children] => Array
(
[0] => Array
(
[id] => 23
[subscription_name] => Yearly new offer
[children] => Array
(
)
)
)
)
)
)
[1] => Array
(
[id] => 24
[subscription_name] => Weekly
[children] => Array
(
[0] => Array
(
[id] => 25
[subscription_name] => Weekly new offer
[children] => Array
(
)
)
)
)
请帮我解决这个问题。 谢谢。
【问题讨论】:
-
23 的 parent_id 是 22,因此它出现在 22 的数组下。如果你想像上面说的那样输出,你必须把 23 的 parent_id 改成 1。
-
也不改算法
-
您确定这是所需的输出吗?查看 id=0 的初始数组,它似乎是 ids (0, 1, 21) 的父数组,但我没有在所需的输出中看到它们。
-
也许this 可以提供帮助
-
3v4l.org/obbWl - 检查一下
标签: php arrays codeigniter loops parent-child