【发布时间】:2011-04-21 16:36:08
【问题描述】:
我有一系列位置。这些位置中的每一个都可以有子位置。每个子位置也可以有子位置,依此类推:
$locations = array(
array("id" => 1, "parent_id" => 0, "name" => "England"),
array("id" => 2, "parent_id" => 0, "name" => "Scotland"),
array("id" => 3, "parent_id" => 0, "name" => "Ireland"),
array("id" => 4, "parent_id" => 0, "name" => "Wales"),
array("id" => 5, "parent_id" => 1, "name" => "East England"),
array("id" => 6, "parent_id" => 1, "name" => "London"),
array("id" => 7, "parent_id" => 6, "name" => "West London"),
array("id" => 8, "parent_id" => 6, "name" => "East London"),
array("id" => 9, "parent_id" => 1, "name" => "East Midlands"),
array("id" => 10, "parent_id" => 9, "name" => "Derbyshire")
);
我想重新构造这个数组,使子数组成为父数组。像这样的东西(未经测试):
$locations = array("id" => 1, "parent_id" => 0, "name" => "England", "children" => array(
array("id" => 5, "parent_id" => 1, "name" => "East England"),
array("id" => 6, "parent_id" => 1, "name" => "London", "children" => array(
array("id" => 7, "parent_id" => 6, "name" => "West London"),
array("id" => 8, "parent_id" => 6, "name" => "East London")))));
这样我就可以像这样使用缩进打印出来:
LOCATIONS
England
- East England
- London
-- West London
-- East London
- East Midlands
-- Derbyshire
Scotland
Ireland
Wales
我已经尝试了几种方法,比如按父 ID 对它们进行分组,但我就是想不出这样做的逻辑,并且可能有更好的方法(也许是递归?)。
非常感谢。
【问题讨论】:
-
您能添加一些您尝试过的代码示例吗?顺便说一句,递归可能是通过引用将结果传递给函数的最佳方法。
标签: php arrays recursion logic