现有一个数组
$d = array( array( '公告', 1, 0 ), array( '文章', 2, 0 ), array( '文章1', 3, 2 ), array( '文章2', 4, 2), array( '文章1评论', 5, 3 ), array( '文章2评论', 6, 4 ), array( '文章1评论1', 7, 3 ), array( '文章1评论评论', 8, 5 ),);期望如下输出
公告文章 文章1 文章1评论 文章1评论评论 文章1评论1 文章2 文章2评论
于是可以
foreach($d as $t) list($a[$pid][$id], $id, $pid) = $t;得到
Array( [0] => Array ( [1] => 公告 [2] => 文章 ) [2] => Array ( [3] => 文章1 [4] => 文章2 ) [3] => Array ( [5] => 文章1评论 [7] => 文章1评论1 ) [4] => Array ( [6] => 文章2评论 ) [5] => Array ( [8] => 文章1评论评论 ))可以看到,数据按第3列聚类了
于是再用一个递归函数就可实现数据的展示了
function foo($ar, $pid=0, $deep=0) { foreach($ar[$pid] as $k=>$v) { printf("%s%s\n", str_repeat(' ', $deep), $v); if(isset($ar[$k])) foo($ar, $k, $deep+2); }}调用 foo($a);
回复讨论(解决方案)
版主是个大好人
斑竹对无限级树情有独钟。
每次看都有新收获。
前排 学习!
学习了。呵呵
原来是这样表现的。
真简洁,学习了。
写的不错啊,学习了
static void Main(string[] args) { double a, b, c, p, h, area; Console.Write("请输入三角形的边A: "); string s = Console.ReadLine(); a = double.Parse(s); Console.Write("请输入三角形的边B: "); s = Console.ReadLine(); b = double.Parse(s); Console.Write("请输入三角形的边C: "); s = Console.ReadLine(); c = double.Parse(s); if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a) { Console.WriteLine("三角形的三边分别为:a={0},b={1},c={2}", a, b, c); p = a + b + c; h = p / 2; area = Math.Sqrt(h * (h - a) * (h - b) * (h - c)); Console.WriteLine("三角形的周长={0},面积={1}",p,area); } else Console.WriteLine("无法构成三角形!"); Console.ReadKey(); }
不好意思,上面那个发错了。。。我不是故意的。。我是想试一下这个编辑器的功能
学习了
牛X,学习了
http://www.javadad.com
学习了 版主
不错,学习学习了
很不错,学习了
支持一下
hao......
观摩,学习,支持,接分
学习了。
谢谢楼主分享
谢谢楼主分享,学习啦!
学习了
眩技那
简洁明了 树 总是用递归方便
真的很不错,很有用,可以学习学习
LZ的思路和我用的思路是一样的,但代码比我的要少很多,比我高明多了。
这种算法的思路就是建立一人以parent_id为键名的二级数组,用递归调用这个数组。
array(2978) { [0]=> object(stdClass)#1 (4) { ["id"]=> string(8) "50094064" ["subject"]=> string(22) "在线影视/电子书" ["parent_id"]=> int(0) ["type_id"]=> int(0) }.........
上面是组织形式,个人习惯把这分类生成对象保存到txt文本里面,生成的有自定义键名,不能直接list(),用array_values取出后,再用list还是不正常,又换了$t的元素键名,还是不正常。
//源数组 转化了数组 下面是foreach里面的内容 这个list形式不能用$t=array_values($t);list($id,$a[$pid][$t[$id],$pid,$tid) = $t;
于是又改了一下,能用了。
//源数据转换成了对象foreach($object_tmp as $t) { $t=array($t->subject,$t->id,$t->parent_id); list($a[$pid][$id],$id,$pid) = $t;}
不过,换了一位置。
//源数据转换成了对象foreach($object_tmp as $t) { $t=array($t->id,$t->subject,$t->parent_id); list($id,$a[$pid][$id],$pid) = $t;}
又不能用了,看了半天list的说明,也没能找到答案
附上本人原来的做法:
对于list转化二维数组的,个人采取比较笨拙的方法,源数组与上面的类似
//以父级id为键名的 更多一维的(一般3维)数组 $tmp=array(); foreach ($item_category as $it){ if( count($tmp[$it["parent_id"]]) ){ $tmp[$it["parent_id"]][count($tmp[$it["parent_id"]])]=$it; }else{ $tmp[$it["parent_id"]][0]=$it; } }
$tmp就是相当于LZ方法的数组$a
从项目文件里面拿出来的,写在控制器里面的,就不改了
//用于存放数据(整理好的)的公共变量 var $sorta=array(); //树形排序核心部分 pid:父级起始 tmp以父级id为第一维的数组 public function get_all_($pid,$tmp){ $tt=$tmp[$pid]; foreach($tt as $ttt){ $this->sorta[count($this->sorta)]=$ttt; $this->get_all_($ttt["id"],$tmp); } }
换成javascript的就最好
学习了,不错
不错不错,这个必须收藏一下。
好 很简单 方便了
错不错,这个必须收藏一下。
学习了 方法很简便
学习了 方法很简便
学习了
已阅..
前面也做过这个,不过是直接写递归函数从数据库取的。
很?大,又?到一招
观摩,学习,支持,接分

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

HTTP缓存头的关键玩家包括Cache-Control、ETag和Last-Modified。1.Cache-Control用于控制缓存策略,示例:Cache-Control:max-age=3600,public。2.ETag通过唯一标识符验证资源变化,示例:ETag:"686897696a7c876b7e"。3.Last-Modified指示资源最后修改时间,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

PHP在过去几十年中塑造了网络,并将继续在Web开发中扮演重要角色。1)PHP起源于1994年,因其易用性和与MySQL的无缝集成成为开发者首选。2)其核心功能包括生成动态内容和与数据库的集成,使得网站能够实时更新和个性化展示。3)PHP的广泛应用和生态系统推动了其长期影响,但也面临版本更新和安全性挑战。4)近年来的性能改进,如PHP7的发布,使其能与现代语言竞争。5)未来,PHP需应对容器化、微服务等新挑战,但其灵活性和活跃社区使其具备适应能力。

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

WebStorm Mac版
好用的JavaScript开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境