<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP Log &#187; Tree</title>
	<atom:link href="http://www.php-log.de/tags/tree/feed" rel="self" type="application/rss+xml" />
	<link>http://www.php-log.de</link>
	<description>Eine feine Sammlung nützlicher PHP Notizen</description>
	<lastBuildDate>Mon, 20 Sep 2010 00:22:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Fortgeschrittene Anwendung der Tree Komponente</title>
		<link>http://www.php-log.de/141/php/fortgeschrittene-anwendung-der-tree-komponente</link>
		<comments>http://www.php-log.de/141/php/fortgeschrittene-anwendung-der-tree-komponente#comments</comments>
		<pubDate>Wed, 04 Feb 2009 15:41:38 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Tree]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=141</guid>
		<description><![CDATA[Das Tree Behaviour von CakePHP nutzt die Modified Preorder Tree Traversal (MPTT) Technik. Im Gegensatz zur hierarchischen Speichermethode für Bäume, werden hierbei Teilmengen gebildet und durch die Parameter &#8220;left&#8221; und &#8220;right&#8221; eingegrenzt. Dieser Artikel enthält eine Grafik die dass Prinzip sehr schön verdeutlicht. Um an eine Teilmenge in Form eines Astes oder &#8220;Nodes&#8221; zu gelangen, [...]]]></description>
			<content:encoded><![CDATA[<p>Das Tree Behaviour von CakePHP nutzt die Modified Preorder Tree Traversal (MPTT) Technik. Im Gegensatz zur hierarchischen Speichermethode für Bäume, werden hierbei Teilmengen gebildet und durch die Parameter &#8220;left&#8221; und &#8220;right&#8221; eingegrenzt. Dieser <a href="http://dev.mysql.com/tech-resources/articles/hierarchical-data.html" target="_blank">Artikel</a> enthält eine Grafik die dass Prinzip sehr schön verdeutlicht. Um an eine Teilmenge in Form eines Astes oder &#8220;Nodes&#8221; zu gelangen, werden einfach die Parameter &#8216;left&#8217; und &#8216;right&#8217; genutzt. <span id="more-141"></span></p>
<p>Mit den eingebauten Methoden des Behaviours Tree stößt man relativ schnell an Grenzen, deswegen ist das Wissen um die einfache Handhabung der Daten sehr wichtig. Um zum Beispiel an alle Kind Elemente eines Baumes zu gelangen bietet Tree die Methode children() an. Was aber wenn nur die Children geholt werden sollen deren Name mit A beginnt, oder dem status active oder die Daten sollen in eine Pagination geschossen werden? Ganz klar, die Daten müssen mit der find() Methode des Models geholt werden. Hier ein wenig Sample Code für eine Tree Pagination:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> UsersController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Users'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> search<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Wir holen den gewünschten Eintrag aus der DB</span>
		<span style="color: #666666; font-style: italic;">// anhand des Primärschlüssels</span>
		<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">User</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">findById</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Wir nutzen dessen left und right Werte um ´</span>
		<span style="color: #666666; font-style: italic;">// den Ast einzugrenzen</span>
		<span style="color: #000088;">$search_options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'User.lft &gt; '</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$user</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'lft'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'User.rght &lt; '</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$user</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'rght'</span><span style="color: #009900;">&#93;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Fügen hier noch die besondere Suchbedingung ein</span>
		<span style="color: #000088;">$search_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'User.lastname LIKE '</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;a%&quot;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Und übergeben den Rest dem Pagination Helper</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'users'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'User'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$search_options</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>So einfach ist das&#8230;im Prinzip&#8230;</p>
<p>Ein weiterer guter Artikel der sich mit dem Thema beschäftigt findet sich <a href="http://www.sitepoint.com/print/hierarchical-data-database/">hier</a>. Es gibt auch eine sehr einfache Formel um die Anzahl der Kinder eines Knotens zu ermitteln, dazu ist kein SQL notwendig und deswegen hervorragend für die Verwendung innerhalb von Views geeignet.</p>
<blockquote><p>Anzahl Nodes = (right &#8211; left &#8211; 1) / 2</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/141/php/fortgeschrittene-anwendung-der-tree-komponente/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verwirrende Signatur von Tree generatetreelist()</title>
		<link>http://www.php-log.de/103/php/verwirrende-signatur-von-tree-generatetreelist</link>
		<comments>http://www.php-log.de/103/php/verwirrende-signatur-von-tree-generatetreelist#comments</comments>
		<pubDate>Mon, 02 Feb 2009 10:40:27 +0000</pubDate>
		<dc:creator>ralle</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tree]]></category>

		<guid isPermaLink="false">http://www.php-log.de/?p=103</guid>
		<description><![CDATA[Das Behaviour Tree von CakePHP ist schon recht nützlich, aber mitunter ist CakePHP nicht sooo gut dokumentiert. Die Doku sagt die Methode generatetreelist() hätte folgende Signatur: $this-&#62;Category-&#62;generatetreelist &#40; &#38;$model, $conditions=null, $keyPath=null, $valuePath=null, $spacer= '_', $recursive=null &#41;; Ruft man die Funktion aber so wie inder Doku beschrieben auf: $this-&#62;Category-&#62;generatetreelist&#40; null, null, null, '--' &#41;; erhält man [...]]]></description>
			<content:encoded><![CDATA[<p>Das Behaviour Tree von CakePHP ist schon recht nützlich, aber mitunter ist CakePHP nicht sooo gut dokumentiert. Die Doku sagt die Methode generatetreelist() hätte folgende Signatur:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Category</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">generatetreelist</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #339933;">&amp;</span><span style="color: #000088;">$model</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$conditions</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$keyPath</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$valuePath</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$spacer</span><span style="color: #339933;">=</span> <span style="color: #0000ff;">'_'</span><span style="color: #339933;">,</span> 
    <span style="color: #000088;">$recursive</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><span id="more-103"></span></p>
<p>Ruft man die Funktion aber so wie inder Doku beschrieben auf:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Category</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">generatetreelist</span><span style="color: #009900;">&#40;</span>
    <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'--'</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>erhält man nicht das gewünschte Ergebnis. Das Problem liegt im ersten Parameter. Diese ist für den Aufruf irrelevant und muss ignogiert werden. Die Methode muss so aufgerufen werden als hätte Sie diese Signatur:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Category</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">generatetreelist</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #000088;">$conditions</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$keyPath</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$valuePath</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$spacer</span><span style="color: #339933;">=</span> <span style="color: #0000ff;">'_'</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$recursive</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Wobei der erste Parameter also schon das Conditions Array ist.</p>
<p>Wenig intuitiv mutet auch die Auswahl der Felder für key und value an:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Category</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">generatetreelist</span><span style="color: #009900;">&#40;</span>
    <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'{n}.Category.email'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'{n}.Category.title'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'-'</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ja, richtig das Konstukt {n}. muss drin sein. Ein Blick in den Quelltext der Methode macht dass deutlich:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> generatetreelist<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span><span style="color: #000088;">$Model</span><span style="color: #339933;">,</span> <span style="color: #000088;">$conditions</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$keyPath</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$valuePath</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$spacer</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'_'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$recursive</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000088;">$overrideRecursive</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$recursive</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">extract</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">settings</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">alias</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$overrideRecursive</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$recursive</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$overrideRecursive</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyPath</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$valuePath</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasField</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">displayField</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$fields</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">primaryKey</span><span style="color: #339933;">,</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">displayField</span><span style="color: #339933;">,</span> <span style="color: #000088;">$left</span><span style="color: #339933;">,</span> <span style="color: #000088;">$right</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$fields</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyPath</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$keyPath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'{n}.'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">alias</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">primaryKey</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$valuePath</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$valuePath</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'{0}{1}'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'{n}.tree_prefix'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'{n}.'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">alias</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">displayField</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$valuePath</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'{0}{1}'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'{n}.tree_prefix'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'{'</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'}'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'{n}.tree_prefix'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$order</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">alias</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$left</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' asc'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'all'</span><span style="color: #339933;">,</span> <span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'conditions'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'fields'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'order'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'recursive'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$stack</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$stack</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$stack</span><span style="color: #009900;">&#91;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stack</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">alias</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$right</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #990000;">array_pop</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stack</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000088;">$results</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tree_prefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_repeat</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$spacer</span><span style="color: #339933;">,</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stack</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$stack</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">alias</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$right</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> Set<span style="color: #339933;">::</span><span style="color: #004000;">combine</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #339933;">,</span> <span style="color: #000088;">$keyPath</span><span style="color: #339933;">,</span> <span style="color: #000088;">$valuePath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.php-log.de/103/php/verwirrende-signatur-von-tree-generatetreelist/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

