dan*_*est 5 php arrays recursion logic
我有一系列的位置.这些位置中的每一个都可以具有子位置.每个子位置也可以有孩子,依此类推:
$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")
);
Run Code Online (Sandbox Code Playgroud)
我想重新构造这个数组,以便子节点是父节点的数组.像这样(未经测试):
$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")))));
Run Code Online (Sandbox Code Playgroud)
这样我就可以使用缩进打印出来,如下所示:
LOCATIONS
England
- East England
- London
-- West London
-- East London
- East Midlands
-- Derbyshire
Scotland
Ireland
Wales
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种方法,比如用父ID对它们进行分组,但是我无法解决这个问题的逻辑,并且可能有更好的方法(递归,也许?).
非常感谢.