Array
(
[178] => Array
(
)
[179] => Array
(
[180] =>
[181] =>
[182] =>
[183] =>
)
[184] => Array
(
[185] =>
)
[186] => Array
(
)
[189] => Array
(
[190] =>
)
[181] => Array
(
[191] =>
[192] =>
)
[192] => Array
(
[194] =>
)
)
我有一个'链表',这个PHP数组是所有节点的列表。我使用密钥存储唯一的mysql ID以供以后查找。 您会注意到第二级数组中的某些键与第一级相同。我想加入这些数组,以便较低级别以递归方式连接到较高级别。
例如,179 - > 181 - > 192 - > 194
可能有许多节点级别,而不仅仅是我在此示例中的内容。 如何以递归方式将所有节点一起添加到正确的顺序中?
UPDATED 我还有一个节点上所有端点的数组,即没有其他节点的ID。
阵 ( [0] => 178 [1] => 180 [2] => 182 [3] => 183 [4] => 185 [5] => 186 [6] => 190 [7] => 191 [8] => 194 )
答案 0 :(得分:2)
我不是肯定这是你正在寻找的,我相信有更多有效的方法可以做到这一点。但是这里有一个镜头:
给出上面提到的输入示例。
此代码:
function index_nodes($nodes, &$index) {
foreach($nodes as $key => $value) {
if ($value) {
$index[$key] = $value;
index_nodes($value, $index);
}
}
}
function nest_list($list) {
$index = array();
index_nodes($list, $index);
// Construct tree
$build_tree = function(&$value, $key) use ($index, &$updated) {
if(array_key_exists($key, $index)) {
$value = $index[$key];
$updated = true;
}
};
// This needs done several times, since I can't be sure I nested things
// in the perfect order.
do {
$updated = false;
array_walk_recursive($list, $build_tree);
} while($updated);
return $list;
}
像这样跑:
$list2 = nest_list($list);
print_r($list2);
提供以下输出:
Array
(
[178] =>
[179] => Array
(
[180] =>
[181] => Array
(
[191] =>
[192] => Array
(
[194] =>
)
)
[182] =>
[183] =>
)
[184] => Array
(
[185] =>
)
[186] =>
[189] => Array
(
[190] =>
)
[181] => Array
(
[191] =>
[192] => Array
(
[194] =>
)
)
[192] => Array
(
[194] =>
)
)
再次......大量的代码,但我认为这会让你更接近目标。