用 list 处理树状数据(邻接列表)
现有一个数组
$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评论评论 ))
于是再用一个递归函数就可实现数据的展示了
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); }}
回复讨论(解决方案)
版主是个大好人
斑竹对无限级树情有独钟。
每次看都有新收获。
前排 学习!
学习了。呵呵
原来是这样表现的。
真简洁,学习了。
写的不错啊,学习了
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的就最好
学习了,不错
不错不错,这个必须收藏一下。
好 很简单 方便了
错不错,这个必须收藏一下。
学习了 方法很简便
学习了 方法很简便
学习了
已阅..
前面也做过这个,不过是直接写递归函数从数据库取的。
很?大,又?到一招
观摩,学习,支持,接分

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











In PHP, password_hash and password_verify functions should be used to implement secure password hashing, and MD5 or SHA1 should not be used. 1) password_hash generates a hash containing salt values to enhance security. 2) Password_verify verify password and ensure security by comparing hash values. 3) MD5 and SHA1 are vulnerable and lack salt values, and are not suitable for modern password security.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.
