无限极 php算法,无限极分类算法,对你一定有帮助

a336c592a49c65519186b087e8d83557.png

无限级分类是开发中常见的情况,也经常会在面试,主考官问到,笔试中遇到,因此本文对常见的无限极分类算法进行总结归纳,其实大多数就是迭代与递归。

1.循环迭代实现

$arr = [

1=>['id'=>1,'name'=>'父1','father'=>NULL],

2=>['id'=>2,'name'=>'父2','father'=>NULL],

3=>['id'=>3,'name'=>'父3','father'=>NULL],

4=>['id'=>4,'name'=>'儿1-1','father'=>1],

5=>['id'=>5,'name'=>'儿1-2','father'=>1],

6=>['id'=>6,'name'=>'儿1-3','father'=>1],

7=>['id'=>7,'name'=>'儿2-1','father'=>2],

8=>['id'=>8,'name'=>'儿2-1','father'=>2],

9=>['id'=>9,'name'=>'儿3-1','father'=>3],

10=>['id'=>10,'name'=>'儿3-1-1','father'=>9],

11=>['id'=>11,'name'=>'儿1-1-1','father'=>4],

12=>['id'=>12,'name'=>'儿2-1-1','father'=>7],

];

function generateTree($items){

$tree = array();

foreach($items as $item){

if(isset($items[$item['father']])){

$items[$item['father']]['son'][] = &$items[$item['id']];

}else{

$tree[] = &$items[$item['id']];

}

}

return $tree;

}

$tree = generateTree($arr);

print_r(json_encode($tree));

输出:

12aba866b0045cc728fd82dd4ac8bedf.png

分析:

这个算法利用了循环迭代,将线性结构按照父子关系以树形结构输出,算法的关键在于使用了引用.

优点:速度快,效率高.

缺点:数组的key值必须与id值相同,不便于取出数据(同样使用迭代获取数据)

2.递归实现

$arr = [

0=>['id'=>1,'name'=>'父1','father'=>0],

1=>['id'=>2,'name'=>'父2','father'=>0],

2=>['id'=>3,'name'=>'父3','father'=>0],

3=>['id'=>4,'name'=>'儿1-1','father'=>1],

4=>['id'=>5,'name'=>'儿1-2','father'=>1],

5=>['id'=>6,'name'=>'儿1-3','father'=>1],

6=>['id'=>7,'name'=>'儿2-1','father'=>2],

7=>['id'=>8,'name'=>'儿2-1','father'=>2],

8=>['id'=>9,'name'=>'儿3-1','father'=>3],

9=>['id'=>10,'name'=>'儿3-1-1','father'=>9],

10=>['id'=>11,'name'=>'儿1-1-1','father'=>4],

11=>['id'=>12,'name'=>'儿2-1-1','father'=>7],

];

function generateTree($arr,$id,$step){

static $tree=[];

foreach($arr as $key=>$val) {

if($val['father'] == $id) {

$flg = str_repeat('└―',$step);

$val['name'] = $flg.$val['name'];

$tree[] = $val;

generateTree($arr , $val['id'] ,$step+1);

}

}

return $tree;

}

$tree = generateTree($arr,0,0);

foreach ($tree as $val){

echo $val['name'].'
';

}

输出

d75919e3c3ddd6d9b648839d21b8e381.png

分析:

利用了递归,数组的key值与id值可以不相同,最后以顺序的结构输出数组

优点:方便遍历,查找父子元素

缺点:php不擅长递归,数据量大的情况下效率会显著降低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pmp中ram和raci的区别_【PMP知识点总结】采购流程、采购合同的类型、采购合同的条款...

PMP考试的内容,围绕着《PMBOK》开展。《PMBOK》第六版第一部分的第十二章【项目采购管理】,有两个三个高频知识点(采购流程和采购合同、索赔)。在PMP考试里,通常项目经理是甲方的项目经理,是甲方爸爸&#…

php issign为false,支付宝接口集成及错误排除

我集成了支付宝接口,可以支付成功,可是notify_url.php中始终好像没有回调,所以按照官方文档,我作了以下修改php$verify_result $alipayNotify->verifyNotify();if($verify_result) {//商户订单号$order_id $_POST[out_trade_…

查看队列深度_不为人知的网络编程(十一):从底层入手,深度分析TCP连接耗时的秘密...

“ 本文作者张彦飞,原题“聊聊TCP连接耗时的那些事儿”,本次收录已征得作者同意,转载请联系作者。即时通讯网收录时有少许改动。本文已同步发布于52im社区:http://www.52im.net/thread-3265-1-1.html(1、引言对于基于互联网的通信…

perl python ruby_perl,lua,python,ruby的对比(3) -- lambda,closure,proper tail function call

今天的题目是函数,先看一下匿名函数。Perl里是这样的$f sub{ return $_[0]$_[1]$_[2];};print &$f(1,2,3)."\n";lua里是这样的f function(x,y,z) return xyz endprint (f(1,2,3))python里使用了lambda概念,实现是这样的,也可…

oracle将一个表数据更新时间,Oracle批量更新,将一个表的数据批量更新另一表

【问题】现在有两个千万级别的结构相同数据不同数据表T_SMS_PHONENO(目的表),T_SMS_PHONENO2(源表),根据源表数据更新目的表的数据。【分析】根据经验,更新方法一般有以下几种:1、直接update。update T_SMS_PHONENO T Set T.NA…

几级工作台做石头高墙_创造与魔法:建筑新手入门攻略,家园建材怎么做

hello大家好,又见面啦,我是创造与魔法郁金香建筑团的建筑师,九梨梨众所周知,我是一个热衷于出各类建筑案例的人,玩创魔两年多,做了好几十个不同款式的家园吧。其实创魔这个游戏,建筑只是其中一个…

oracle vitu,Supply Chain Management (SCM) a Manufacturing | Oracle Česká Republika

Nebyly nalezeny ždn vsledkyVašemu vyhledvn neodpovdaj ždn vsledky.Abyste našli to, co hledte, doporučujeme vyzkoušet nsledujc postup:Zkontrolujte pravopis vašich klčovch slov ve vyhledvn.Použijte synonyma pro klčov slovo, kter jste zadali, napřk…

python程序文件是什么_.py文件是什么?

展开全部.py文件是python的脚本文件。Python在执行时,首先会将.py文件中的62616964757a686964616fe59b9ee7ad9431333431363039源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。这种机…

oracle12 快照保存时间,【AWR】调整AWR数据采样时间间隔及历史快照保留时间

1.AWR默认的采样间隔和历史快照保留时间默认是保留七天,采集间隔是1小时,这个信息可以从DBA_HIST_WR_CONTROL视图中获得。sysora10g> col SNAP_INTERVAL for a20sysora10g> col RETENTION for a20sysora10g> select * from dba_hist_wr_control…

两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍

arXiv今年10月刚刚上传论文“LiRaNet: End-to-End Trajectory Prediction using Spatio-Temporal Radar Fusion“。其特色在于,除了激光雷达和HD Map之外,该轨迹预测方法采用了雷达传感器的信息。雷达和激光雷达融合是有挑战性的,因为前者的低…

python解方程时 怎样变换系数批量解方程_python求解方程

最有效的求解方法:三行代码搞定任何线性方程云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!在三行函数中解决任何线性方程式的技巧,甚至可以在两行代码…

linux查看目录下 开头,Linux下ls如何看到.开头的文件

Linux下ls查看到.开头的文件方法:ls -aLinux操作系统是UNIX操作系统的一种克隆系统,它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界…

python3.7代码转python2.7_Python3.7与Python2.7在centos7下兼容并存

原标题:Python3.7与Python2.7在centos7下兼容并存1、下载python3.7wget "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz"2、解压下载好的压缩包tar -zxvf Python-3.7.0.tgz3、配置编译python3.7mkdir /usr/local/python3 cd Python-3.7.0 ./…

linux红帽密码复杂度,[步骤] Linux 密码策略的设置(设置密码复杂度)(CentOS8RHEL8 版)...

步骤目录:步骤一:设置密码必须包含大小写字母等策略1.1 生成设置密码必须包含大小写字母的策略文件1.2 设置密码必须包含大小写字母等策略步骤二:设置密码有效期等策略步骤三:设置新密码不能和旧密码重复的策略具体的操作步骤&…

增值电信服务费是什么意思_增值电信业务IDC许可证要年检吗,流程是什么

据国家相关法律法规,持有IDC许可证的企业每年年初都需要办理IDC年检,企业也应当重视IDC年检,否则将会面临惩罚,所以小编来给大家介绍云南IDC许可证年检流程。为什么要办理云南IDC许可证年检,如何办理?根据《中华人民共和国电信条…

linux查看进程调用接口,查看某个程序都调用哪些api函数

查看某个程序都调用哪些api函数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!查看某个程序都调用哪些api函数vs6里带了个工具叫depends可以看反汇编软件w32dasm也可以希望能帮到你windows编…

linux生产上线工具,Linux 产能工具及其使用技巧

由于生产力本身是一个主观术语,我不打算详细解释我这里要讲到的“生产力”是什么。我打算给你们展示一些工具及其使用技巧,希望这会帮助你在Linux中工作时能更专注、更高效,并且能节省时间。Linux产能工具及其使用技巧再次说明,我…

python编译2的n次方计算器_用PYTHON2做个计算器,哪位高手能用Python写出计算器的代码,需要加减乘除和退出,谢谢!...

匿名用户 1级 2018-06-05 回答 粗略的写了一个,没有包含对输入的检查。 # coding: utf-8 计算器 operator = {a: [a for addition,+], b: [b for subtraction,-], c: [c for multiplication,*], d: [d for division,/], z: [z for exit,None] } def DisplayOperationMenu():…

linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB

Linux 2.6.24.4移植到S3C2410(nano2410)之:USB【平台信息】目标板(Nano2410)------------------------CPU: S3C2410XSDRAM:HY57V561620(32MB)FLASH: K9F1208(64MB)NET: CS8900HOST---------------------------------------Linux Realse Version:Fecora Cor 8 (FC8)C…

现代汉语词典第五版_从现代汉语词典“哀兵必胜”词条说起

本文属本公众号原创。想转发可以后台留言,别洗我们的稿!最近,编校一姐一直在研读《现代汉语词典》(第7版),将会陆续发布学习心得。今天,说一说“哀兵必胜”词条。第一版第五版第六版第七版故抗兵相若(加),(…