<?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。