PHP无限分类技术—表设计实现无限分类

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值