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

$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

$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

为什么不弄成二维数组。

可以用无限极分类

想办法弄成这样

元素 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

";

}

// 把这类数据转换成无限级格式...

$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中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值