在循环中使PHP数组中的层次结构

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在循环中使PHP数组中的层次结构脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经和这样的问题争了好几个小时了.为了加速我的网页,我请求数据库获取所有类别一次,然后想要使用 PHP对数组进行排序.

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => name1
            [parent] => 0
            [children] => 
        )
   [1] => Array
    (
        [id] => 2
        [name] => name2
        [parent] => 1
        [children] => 
    )
)

我需要得到这样的东西

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => name1
            [parent] => 0
            [children] => Array
                  (
                      [id] => 2
                      [name] => name2
                      [parent] => 1
                      [children] => 
                  )
        )

)

问题在于它适用于任何级别的层次结构.这样它就可以在循环中工作.请帮忙!

解决方法

这里有很多减少开销的解决方案.但是,如果不知道你的约束是什么,就很难推荐一种方法.

例如.:

>使用邻接模型 – 请参阅我对dnagirl答案的评论
>将所有数据加载到PHP然后使用递归算法创建嵌套树(这将是相当慢的,并将从一些缓存中受益)
>编写递归存储过程,该过程返回按深度优先树步行排序的结果集

将示例2更接近代码….类似……

function build_tree(&$unsorted,$start_node)
 {
     $out=array();
     foreach($unsorted as $key=>$node) {
        if ($node['parent']==$start_node) {
            $node['children']=build_tree($unsorted,$key);
            unset($unsorted[$key]);
            $out[]=$node;
        }
     }
     return $out;
 } 
 $threaded_tree=build_tree($list_of_nodes,0); // assumes that the root is the First element

脚本宝典总结

以上是脚本宝典为你收集整理的在循环中使PHP数组中的层次结构全部内容,希望文章能够帮你解决在循环中使PHP数组中的层次结构所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。