<?php
$rows = array(
array(
'id'=>1,
'name'=>'php',
'pid'=>0,
'path'=>'0'
),
array(
'id'=>2,
'name'=>'linux',
'pid'=>0,
'path'=>'0'
),
array(
'id'=>3,
'name'=>'系统安装',
'pid'=>2,
'path'=>'0-2'
),
array(
'id'=>5,
'name'=>'硬盘分区',
'pid'=>3,
'path'=>'0-2-3'
),
array(
'id'=>8,
'name'=>'分区格式化',
'pid'=>5,
'path'=>'0-2-3-5'
),
array(
'id'=>6,
'name'=>'软件安装',
'pid'=>3,
'path'=>'0-2-3'
),
array(
'id'=>7,
'name'=>'Java技术',
'pid'=>0,
'path'=>'0'
),
array(
'id'=>4,
'name'=>'文件上传',
'pid'=>1,
'path'=>'0-1'//顶级分类下的1分类
),
);
//降维度
/**
* php技术
* |-面向对象
* |--pdo技术
*/
//取地址符改变rows数组
foreach ($rows as &$row){
//统计横杠字符出现的次数
$num = substr_count($row['path'],'-');
//打印遍历结果为 0011
// echo $num;
//将pid=0的数组过滤
if($row['pid']>0){
//将结果替换成横杠字符拼接字符串
$pre ='|'. str_repeat('--',$num);
}else{
$pre = "";
}
//组装新数组
$row['tree'] = $pre.$row['name'];
}
/**
* path + id 进行排序
* 排序前
* 0-1
* 0-2
* 0-2-3
* 0-1-4
*-------------------------
* 排序后
* 0-1
* 0-1-4
* 0-2
* 0-2-3
*/
foreach ($rows as $row2){
$arr[] = $row2['path'].'-'.$row2['id'];
}
//多数组排序
array_multisort($arr,$rows);
foreach ($rows as $row3){
echo "<p>{$row3['tree']}</p>";
}
PHP 引用详解参考https://www.cnblogs.com/alsf/p/9621362.html