我现在有一个数组,希望通过递归来实现分级
类似于树状,想要实现的效果如下:
标志(ID为1)
|_307
|_307两厢
|_307三厢
|_308
|_308两厢
|_308三厢
别克(ID为4)
定义的数组为
Array ( [1] => Array ( [1] => Array ( [2] => Array ( [0] => 307 ) [5] => Array ( [0] => 308 ) ) [2] => Array ( [3] => Array ( [0] => 307二厢 ) [7] => Array ( [0] => 307三厢 ) ) [5] => Array ( [6] => Array ( [0] => 308二厢 ) [8] => Array ( [0] => 308三厢 ) ) ) [4] => Array ( ) ).
其中别克现在为空数组,即[4] => array()
标志里的数组即 [1] => Array( [1] => Array ( [2] => Ar .......
其中的匹配方法为;
[2] => Array ( [0] => 307 ) 的子级为 [2] => Array ( [3] => Array ( [0] => 307二厢 ) [7] => Array ( [0] => 307三厢 ) )
[5] => Array ( [0] => 308 ) 的子级为 [5] => Array ( [6] => Array ( [0] => 308二厢 ) [8] => Array ( [0] => 308三厢 ) )
我想问下,这样的结构能用递归来实现吗?如果是无限级的目录的话用这样的数组结构也可以实现吗?
回复讨论(解决方案)
<?php/*** 通用的树型类,可以生成任何树型结构 */header("content-type:text/html;charset=utf-8");class tree { /** * 生成树型结构所需要的2维数组 * @var array */ public $arr = array(); /** * 生成树型结构所需修饰符号,可以换成图片 * @var array */ public $icon = array('│','├','└'); public $nbsp = " "; /** * @access private */ public $ret = ''; /** * 构造函数,初始化类 * @param array 2维数组,例如: * array( * 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'), * 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'), * 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'), * 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'), * 6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'), * 7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二') * ) */ public function __construct($arr=array()){ $this->arr = $arr; $this->ret = ''; return is_array($arr); } /** * 得到子级数组 * @param int * @return array */ public function get_child($myid) { //$a = $newarr = array(); if(is_array($this->arr)) { foreach($this->arr as $id => $a) { if($a['parentid'] == $myid) { $newarr[$id] = $a; } } } return $newarr ? $newarr : false; } /** * 得到树型结构 * @param int ID,表示获得这个ID下的所有子级 * @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>" * @param int 被选中的ID,比如在做树型下拉框的时候需要用到 * @return string */ public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '') { $number=1; $child = $this->get_child($myid); if(is_array($child)) { $total = count($child); foreach($child as $id=>$value) { $j=$k=''; if($number==$total) { $j .= $this->icon[2]; //如果是最后一个子级使用└ }else { $j .= $this->icon[1]; $k = $adds ? $this->icon[0] : ''; } $spacer = $adds ? $adds.$j : ''; //├ //$selected = $id==$sid ? 'selected' : ''; //下拉选择 @extract($value);//此方法为下面的字符变量赋上相应的键值 $nstr,$str_group $parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";"); $this->ret .= $nstr; $nbsp = $this->nbsp; $this->get_tree($id, $str, $sid, $adds.$k.$nbsp,$str_group); //如果子集是数组,递归调用 此处注意$adds参数 $number++; } } return $this->ret; }}$arr= array( 1 => array('id'=>'1','parentid'=>0,'name'=>'世界'), 3 => array('id'=>'3','parentid'=>1,'name'=>'中国'), 4 => array('id'=>'4','parentid'=>1,'name'=>'美国'), 5 => array('id'=>'5','parentid'=>3,'name'=>'湖南'), 6 => array('id'=>'6','parentid'=>3,'name'=>'北京'), 7 => array('id'=>'7','parentid'=>4,'name'=>'纽约'), 7 => array('id'=>'7','parentid'=>5,'name'=>'长沙') );$tree = new tree($arr);$str = "<ul value=\$id >\$spacer\$name</ul>";echo $tree->get_tree(0,$str);?>
上面的树类是我在phpcms上扣下来整理的,可以放在apache目录下直接运行就可以看到效果,另外精华区有xuzuning版主各种树类。
多谢哈,参考了你给的这个代码,我改进了下自己的代码及数组结构,现在已经把该功能搞定了,多谢!给分

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载
最流行的的开源编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具