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
可能有许多节点级别,而不仅仅是我在本例中所拥有的。如何递归地将所有节点添加到正确的顺序中?
更新的I也有一个节点上所有端点的数组,即没有其他节点的ie。
阵列( => 178 1 => 180 2 => 182 3 => 183 4 => 185 5 => 186 6 => 190 7 => 191 8 => 194 )
发布于 2011-11-14 04:10:51
我不确定这是你想要的,我相信有很多更有效的方法可以做到这一点。但这里有一次机会:
给出上面提到的输入示例。
此代码:
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] =>
)
)再一次..。一堆代码,但我认为它能让你更接近你的目标。
https://stackoverflow.com/questions/8116745
复制相似问题