Php 操作嵌套多维数组
我有一个“链表”,这个PHP数组是所有节点的列表。我已经使用密钥来存储唯一的mysql ID,以便以后查找。 您会注意到,第二级数组中的某些键与第一级数组中的键相同。我希望连接这些数组,以便以递归方式将较低级别连接到较高级别 例如,179->181->192->194 可能有许多节点级别,而不仅仅是我在本例中所看到的。 如何递归地将所有节点添加到正确的顺序中 更新我还有一个节点上所有端点的数组,即没有其他节点的ID 排列 ( [0] => 178 [1] => 180 [2] => 182 [3] => 183 [4] => 185 [5] => 186 [6] => 190 [7] => 191 [8] => 194Php 操作嵌套多维数组,php,multidimensional-array,nested,Php,Multidimensional Array,Nested,我有一个“链表”,这个PHP数组是所有节点的列表。我已经使用密钥来存储唯一的mysql ID,以便以后查找。 您会注意到,第二级数组中的某些键与第一级数组中的键相同。我希望连接这些数组,以便以递归方式将较低级别连接到较高级别 例如,179->181->192->194 可能有许多节点级别,而不仅仅是我在本例中所看到的。 如何递归地将所有节点添加到正确的顺序中 更新我还有一个节点上所有端点的数组,即没有其他节点的ID 排列 ( [0] => 178 [1] => 180 [2] => 182 [3
)我不确定这是您想要的,我相信有很多更有效的方法可以做到这一点。但这里有一个镜头: 给出上面提到的输入示例 此代码:
Array
(
[178] => Array
(
)
[179] => Array
(
[180] =>
[181] =>
[182] =>
[183] =>
)
[184] => Array
(
[185] =>
)
[186] => Array
(
)
[189] => Array
(
[190] =>
)
[181] => Array
(
[191] =>
[192] =>
)
[192] => Array
(
[194] =>
)
)
像这样跑:
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);
再一次。。。一大堆代码,但我认为这会让你更接近你的目标。我怀疑一个更好的数据库查询可以检索到你想要的数据,而不必在phpy中重做它。你可以使用递归函数来完成该任务。第二级中的哪些节点与第一级相同?节点的末尾是什么?确定这就是结局吗?我们可以确定…@bensiu我已经更新了问题,显示了一个包含所有节点端的数组。Homer6我想我需要一个函数来搜索哪些节点具有相同的ID,然后相应地加入它们
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] =>
)
)