<?php
$arr = [
[
'id' => 1,
'name' => 'Python',
'pid' => 0,
'path' => '1,'
],
[
'id' => 2,
'name' => 'JavaScript',
'pid' => 0,
'path' => '2,'
],
[
'id' => 3,
'name' => 'PHP',
'pid' => 0,
'path' => '3,'
],
[
'id' => 4,
'name' => 'ThinkPHP',
'pid' => 3,
'path' => '3,4,'
],
[
'id' => 5,
'name' => 'Laravel',
'pid' => 3,
'path' => '3,5,'
],
[
'id' => 6,
'name' => 'VueJs',
'pid' => 2,
'path' => '2,6,'
],
[
'id' => 7,
'name' => 'RectJs',
'pid' => 2,
'path' => '2,7,'
],
[
'id' => 8,
'name' => 'RectNative',
'pid' => 7,
'path' => '2,7,8,'
],
[
'id' => 9,
'name' => 'Django',
'pid' => 1,
'path' => '1,9,'
],
[
'id' => 10,
'name' => 'Laravel-validator',
'pid' => 5,
'path' => '3,5,10,'
],
];
foreach($arr as &$row){
// 计算路径中,出现的次数, 也就可以判断它的级别
$num = substr_count($row['path'], ',');
if($row['pid'] > 0){ // 说明不是根元素
$pre = '|'.str_repeat('--', $num - 1);
}else{
$pre = '';
}
$row['tree'] = $pre.$row['name'];
}
foreach($arr as $rows){
$tmp_arr[] = $rows['path'];
}
array_multisort($tmp_arr, $arr);
/*
echo "<pre>";
print_r($tmp_arr);
*/
/*
Array
(
[0] => 1,
[1] => 1,9,
[2] => 2,
[3] => 2,6,
[4] => 2,7,
[5] => 2,7,8,
[6] => 3,
[7] => 3,4,
[8] => 3,5,
[9] => 3,5,10,
)
*/
foreach($arr as $row2){
echo "<pre>{$row2['tree']}</pre>";
}
/*
Python
|--Django
JavaScript
|--VueJs
|--RectJs
|----RectNative
PHP
|--ThinkPHP
|--Laravel
|----Laravel-validator
*/
?>
相关函数
-
array_multisort(array1,sorting order,sorting type,array2,array3…)
array_multisort
array1 必需。规定数组。
sorting order 可选。规定排列顺序。可能的值:
SORT_ASC - 默认。按升序排列 (A-Z)。
SORT_DESC - 按降序排列 (Z-A)。
sorting type 可选。规定排序类型。可能的值:
SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。
SORT_NUMERIC - 把每一项作为数字来处理。
SORT_STRING - 把每一项作为字符串来处理。
SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。
SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。
array2 可选。规定数组。
array3 可选。规定数组。
先对第一个数组进行排序, 然后然后后面的数组按照前面的排序规则进行排序
arr1: 排序后的结果是
Array
(
[0] => 5
[1] => 6
[2] => 7
[3] => 8
)
和原来数据对比 第四位和第一位交换, 第三位和第二位交换
那么arr2也按照这个规则
Array
(
[0] => z
[1] => b
[2] => c
[3] => a
)$arr1 = [8, 7, 6, 5]; $arr2 = ['a', 'c', 'b', 'z']; array_multisort($arr1, $arr2); echo "<pre>"; print_r($arr1); echo "<pre>"; print_r($arr2);
-
substr_count(string,substring,start,length) 函数计算子串在字符串中出现的次数。
string 必需。规定被检查的字符串。
substring 必需。规定要搜索的字符串。
start 可选。规定在字符串中何处开始搜索。
length 可选。规定搜索的长度。 -
str_repeat(string,repeat) 函数把字符串重复指定的次数。
string 必需。规定要重复的字符串。
repeat 必需。规定字符串将被重复的次数。必须大于等于 0。