[算法大作戰]無限級分類與多級下拉菜單實用

//測試數據

$ar = array(

array('id'=>1,'pid'=>0),

array('id'=>2,'pid'=>0),

array('id'=>3,'pid'=>2),

array('id'=>4,'pid'=>0),

array('id'=>5,'pid'=>3),

array('id'=>6,'pid'=>1),

array('id'=>7,'pid'=>1),

array('id'=>8,'pid'=>6),

array('id'=>9,'pid'=>7),

array('id'=>10,'pid'=>9)

);

//排序函數

function cmd($a,$b) {

if($a['pid']==$b['pid']) return 0;

return $a['pid']>$b['pid']?1:-1;

}

//排序,為避免數據中父節點在子節點后面出現,這種情況在多次修改數據后經常會發生的

//排序的目的就是防止這種情況造成的混亂

uasort($ar,'cmd');

//定義目標數組

$d = array();

//定義索引數組,用於記錄節點在目標數組的位置

$ind = array();

foreach($ar as $v) {

$v['child'] = array(); //給每個節點附加一個child項

if($v['pid'] == 0) {

$i = count($d);

$d[$i] = $v;

$ind[$v['id']] =& $d[$i];

}else {

$i = count($ind[$v['pid']]['child']);

$ind[$v['pid']]['child'][$i] = $v;

$ind[$v['id']] =& $ind[$v['pid']]['child'][$i];

}

}

//檢查結果

print_r($d);

?>

php 數組重組,php數組的重組及多級下拉菜單相关推荐

  1. python中pack函数,python中struct.pack()函數和struct.unpack()函數

    python中的struct主要是用來處理C結構數據的,讀入時先轉換為Python的字符串類型,然后再轉換為Python的結構化類型,比如元組(tuple)啥的~.一般輸入的渠道來源於文件或者網絡的二 ...

  2. oracle odp arraybindcount 极限,極限挑戰—C#+ODP 100萬條數據導入Oracle數據庫僅用不到1秒...

    .Net程序中可以通過ODP調用特性,對Oracle數據庫進行操作,今天來講一下數據批量插入的功能,所用技術不高不深,相信很多朋友都接觸過,小弟班門弄斧了,呵呵.這篇文章是上篇文章的續集,因為上一次試 ...

  3. 寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n

    看到網路上一篇blog一個問題,引發一群網友的討論. Q:寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7--+n 這是個常見的級數問題,我們必須化簡成closed form ...

  4. 香港和内地重疾险25种常见重疾定义对比全解析

    香港和内地重疾险25种常见重疾定义对比全解析 前言:目前重疾险在程序员之间已成为了一个热门话题,由于程序员工作压力大,得心脑血管病的概率较大.本文转载自知乎,一篇非常专业的文章,对比香港重疾险与内地重 ...

  5. java 防重_如何做一个防重设计

    前言 在业务设计中防重设计是一个关键点,以接口设计为例,防重就是防止接口被多次调用而产生脏数据,比如支付订单出现重复支付,所以说防重至关重要,在如何防重之前我们首先看一下是如何出现重复请求的. 何时出 ...

  6. java 批量重命名_Java实现文件批量重命名

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应 ...

  7. 文件重命名,文件名快速修改重命名

    文件的文件名称重命名也就是修改文件名称?相信每个人都知道操作,最基本的操作技能,但是工作中可能遇到大量的文件需要重命名,如果掌握批量重命名的技巧,提高工作效率,解放双手,方法简单易懂,下面一起来看操作 ...

  8. linux重命名乱码文件,Linux中重命名乱码文件

    Linux下,如何将一个乱码的文件进行重命名 方法一: 命令格式:mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.tx [root@nb o]# l ...

  9. 图书查重器 图书外采查重器 图书盘点机 图书采集器 老师的好帮手

    您是否遇到过? 重复采购 图书品种太多,很难人工记清楚哪些品种采过,哪些品种没有采过,即使记住某个品种, 也很难判断现有图书库存是多少.不可避免出现重复采购或漏采购的情况.为了解决这个 问题,甚至有携 ...

最新文章

  1. 比较ArrayList、LinkedList、Vector
  2. 如何在 Linux 中使用类似智能手机外观的 Conky 天气插件
  3. css基础 设置链接颜色
  4. range python命令_Python学习笔记(一)
  5. 如何使用Pinterest新推出的功能Rich Pin
  6. js高级编号笔记[新]-事件
  7. 网站漏洞渗透检测过程与修复方案
  8. J2SE5 中的最新注释功能SuppressWarnings(转)
  9. w10计算机字体怎么设置在哪里设置,如何设置修改win10系统电脑的显示字体
  10. Matlab遗传算法工具箱(gaot)下载及安装
  11. 神雕侠侣服务器维修,《神雕侠侣》2019年6月13日更新维护新服开启公告
  12. 学会查找问题的源头:网吧系统强制下载QQ浏览器
  13. 史上最详细阿里云服务器搭建网站流程(图文教程)
  14. 搜索引擎优化主要对网站哪些方面做优化
  15. 【Java并发基础】Java内存模型解决有序性和可见性
  16. 惠普服务器bios修改ilo,HPE Gen10 Plus iLO5 BIOS设置固定IP地址
  17. dataframe更改columns
  18. 教育类型网站用户体验分析——以UMU学习平台、学生安全教育平台、师路南通为例...
  19. git使用 - 暂存更改
  20. Android Zxing 扫描器 扫描框、扫描线定制样式

热门文章

  1. Hystrix降级逻辑中如何获取触发的异常?
  2. 容器与微服务从技术到艺术 你需要这场论坛
  3. 机械行业 偏计算机,院校篇丨机械类:985机械不如二本计算机?
  4. c语言 listview,C语言 SDK编程之通用控件的使用--ListView
  5. linux 服务器拦截http请求,详解Linux屏蔽浏览器上http请求警报的方法
  6. linux 服务器 安装网卡驱动,linux下安装编译网卡驱动的方法
  7. 关于pycharm右键只能选择run Unit不能直接run的解决方法
  8. pytorch attention 注意力
  9. 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
  10. oracle递归用法