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。

发布了39 篇原创文章 · 获赞 2 · 访问量 573

猜你喜欢

转载自blog.csdn.net/qq_39583550/article/details/104636794
今日推荐