总结
豆包 AI 助手文章总结

算法 - PHP根据路径数组转成一个目录树

php中文网
发布: 2016-10-11 14:23:12
原创
1791人浏览过

$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];
登录后复制
登录后复制

根据这个数组,转成目录树的结构,如下:
aa
-bb
-kk
ww
-yyy
xx
-oo
--pp

回复内容:

$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];
登录后复制
登录后复制

根据这个数组,转成目录树的结构,如下:
aa
-bb
-kk
ww
-yyy
xx
-oo
--pp

<?php
$paths = ['aa','aa/bb/bb','ww/yyy/bb','aa/kk','xx/oo/pp'];

$arr = [];//先定义一个空数组用来存储所有路径。

//循环找出所有路径
foreach($paths as $v){
    $path = explode('/',$v);
    $temp = '';
    foreach($path as $k2=>$v2){
        $temp .= empty($temp)?$v2:'/'.$v2;
        $arr[$temp] = $temp;
    }
}

sort($arr); //排序

//循环输出
foreach($arr as $v){
    $path = explode('/',$v);
    $n = count($path);
    echo line($n).$path[$n-1]."\n";
}


function line($n){
    $line = '';
    for($i=1;$i<$n;$i++){
        $line .= '-';
    }
    return $line;
}
登录后复制

为什么不弄成二维数组。

可以用无限极分类

想办法弄成这样

立即学习PHP免费学习笔记(深入)”;

元素  id  pid
aa    1   0
bb    2   1
ww    3   0
yyy   4   3
kk    5   1
xx    6   0
oo    7   6
pp    8   7 
登录后复制

用无限极分类的思想

// 重排数组
$paths = ['aa','aa/bb','ww/yyy','aa/kk','xx/oo/pp'];
sort($paths);
// 得到结果数组:k为值,v为前面-
$res = [];
foreach ($paths as $v) {
    // 拆分路径
    $path = explode('/', $v);
    foreach ($path as $k1 => $v1) {
        // 此项前面几个-
        $res[$v1] = '';
        for ($i=0; $i < $k1; $i++) {
            $res[$v1] .= '-';
        }
    }
}
// 输出
foreach ($res as $k => $v) {
    echo "$v$k<br>";
}
登录后复制

  // 把这类数据转换成无限级格式...
  $paths = ['aa','aa/bb/bb','ww/yyy/bb','aa/kk','xx/oo/pp'];
  $data = [];
  $id = 0;
  foreach($paths as $path){
    $tmps = explode('/', $path);
    $parent = '';
    foreach($tmps as $v){
      $parentID = $parent == '' ? 0 : $data[$parent]['id'];
      $parent .= $parent == '' ? $v : '/' . $v;
      if( ! isset($data[$parent]) ){
        $id++;
        $tmp = array(
          'id' => $id,
          'parent_id' => $parentID,
          'key' => $v,
          'path' => $parent,
        );
        $data[$parent] = $tmp;
      }
    }
  }
  
  print_r($data);

  // 再以无限级方式处理数据 $data 
登录后复制

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号