PHP 無限級分類(路徑)

<?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
	 */

 ?>

相關函數

  1. 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);
    
  2. substr_count(string,substring,start,length) 函數計算子串在字符串中出現的次數。

    string 必需。規定被檢查的字符串。
    substring 必需。規定要搜索的字符串。
    start 可選。規定在字符串中何處開始搜索。
    length 可選。規定搜索的長度。

  3. str_repeat(string,repeat) 函數把字符串重複指定的次數。

    string 必需。規定要重複的字符串。
    repeat 必需。規定字符串將被重複的次數。必須大於等於 0。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章