suchen
HeimBackend-EntwicklungPHP-Tutorial用 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评论评论        ))
可以看到,数据按第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的就最好

学习了,不错

不错不错,这个必须收藏一下。

好   很简单  方便了

错不错,这个必须收藏一下。

学习了    方法很简便

学习了    方法很简便

学习了

已阅..

前面也做过这个,不过是直接写递归函数从数据库取的。

很?大,又?到一招

观摩,学习,支持,接分

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Apr 17, 2025 am 12:25 AM

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Apr 17, 2025 am 12:24 AM

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP vs. Python: Anwendungsfälle und AnwendungenPHP vs. Python: Anwendungsfälle und AnwendungenApr 17, 2025 am 12:23 AM

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.

Beschreiben Sie verschiedene HTTP-Caching-Header (z. B. Cache-Control, ETAG, Last-modifiziert).Beschreiben Sie verschiedene HTTP-Caching-Header (z. B. Cache-Control, ETAG, Last-modifiziert).Apr 17, 2025 am 12:22 AM

Zu den wichtigsten Spielern in HTTP-Cache-Headern gehören Cache-Control, ETAG und Last-modifiziert. 1.Cache-Control wird verwendet, um die Richtlinien zu kontrollieren. Beispiel: Cache-Control: max-ay = 3600, öffentlich. 2. ETAG überprüft Ressourcenänderungen durch eindeutige Identifikatoren, Beispiel: ETAG: "686897696A7C876B7E". 3. Last-modifiziert gibt die letzte Änderungszeit der Ressource an, Beispiel: Last-Modified: Mi, 21okt201507: 28: 00GMT.

Erklären Sie sicheres Kennwort -Hashing in PHP (z. B. password_hash, password_verify). Warum nicht MD5 oder SHA1 verwenden?Erklären Sie sicheres Kennwort -Hashing in PHP (z. B. password_hash, password_verify). Warum nicht MD5 oder SHA1 verwenden?Apr 17, 2025 am 12:06 AM

In PHP sollten die Funktionen für Passwort_Hash und passwart_verify verwendet werden, um sicheres Passwort -Hashing zu implementieren, und MD5 oder SHA1 sollte nicht verwendet werden. 1) Passwort_hash generiert einen Hash, der Salzwerte enthält, um die Sicherheit zu verbessern. 2) Passwort_Verify prüfen Sie das Passwort und sicherstellen Sie die Sicherheit, indem Sie die Hash -Werte vergleichen. 3) MD5 und SHA1 sind anfällig und fehlen Salzwerte und sind nicht für die Sicherheit der modernen Passwort geeignet.

PHP: Eine Einführung in die serverseitige SkriptsprachePHP: Eine Einführung in die serverseitige SkriptspracheApr 16, 2025 am 12:18 AM

PHP ist eine serverseitige Skriptsprache, die für dynamische Webentwicklung und serverseitige Anwendungen verwendet wird. 1.PHP ist eine interpretierte Sprache, die keine Zusammenstellung erfordert und für die schnelle Entwicklung geeignet ist. 2. PHP -Code ist in HTML eingebettet, wodurch es einfach ist, Webseiten zu entwickeln. 3. PHP verarbeitet die serverseitige Logik, generiert die HTML-Ausgabe und unterstützt Benutzerinteraktion und Datenverarbeitung. 4. PHP kann mit der Datenbank interagieren, die Einreichung von Prozessformularen und serverseitige Aufgaben ausführen.

PHP und das Web: Erforschen der langfristigen AuswirkungenPHP und das Web: Erforschen der langfristigen AuswirkungenApr 16, 2025 am 12:17 AM

PHP hat das Netzwerk in den letzten Jahrzehnten geprägt und wird weiterhin eine wichtige Rolle bei der Webentwicklung spielen. 1) PHP stammt aus dem Jahr 1994 und ist aufgrund seiner Benutzerfreundlichkeit und der nahtlosen Integration in MySQL die erste Wahl für Entwickler. 2) Zu den Kernfunktionen gehört das Generieren dynamischer Inhalte und die Integration in die Datenbank, sodass die Website in Echtzeit aktualisiert und auf personalisierte Weise angezeigt wird. 3) Die breite Anwendung und das Ökosystem von PHP hat seine langfristigen Auswirkungen angetrieben, steht jedoch auch mit Versionsaktualisierungen und Sicherheitsherausforderungen gegenüber. 4) Leistungsverbesserungen in den letzten Jahren, wie die Veröffentlichung von PHP7, ermöglichen es ihm, mit modernen Sprachen zu konkurrieren. 5) In Zukunft muss PHP sich mit neuen Herausforderungen wie Containerisierung und Microservices befassen, aber seine Flexibilität und die aktive Community machen es anpassungsfähig.

Warum PHP verwenden? Vorteile und Vorteile erläutertWarum PHP verwenden? Vorteile und Vorteile erläutertApr 16, 2025 am 12:16 AM

Zu den Kernvorteilen von PHP gehören einfacher Lernen, starke Unterstützung für Webentwicklung, reiche Bibliotheken und Rahmenbedingungen, hohe Leistung und Skalierbarkeit, plattformübergreifende Kompatibilität und Kosteneffizienz. 1) leicht zu erlernen und zu bedienen, geeignet für Anfänger; 2) gute Integration in Webserver und unterstützt mehrere Datenbanken. 3) leistungsstarke Frameworks wie Laravel; 4) hohe Leistung kann durch Optimierung erzielt werden; 5) mehrere Betriebssysteme unterstützen; 6) Open Source, um die Entwicklungskosten zu senken.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung