加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:05:55 所属栏目:PHP教程 来源:网络整理
导读:我已经和这样的问题争了好几个小时了.为了加速我的网页,我请求数据库只获取所有类别一次,然后想要使用 PHP对数组进行排序. Array( [0] = Array ( [id] = 1 [name] = name1 [parent] = 0 [children] = ) [1] = Array ( [id] = 2 [name] = name2 [parent] = 1
我已经和这样的问题争了好几个小时了.为了加速我的网页,我请求数据库只获取所有类别一次,然后想要使用 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读