<?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>Isaev.Asia</title>
	<atom:link href="http://isaev.asia/feed/" rel="self" type="application/rss+xml" />
	<link>http://isaev.asia</link>
	<description>Разработка сайтов под ключ, web программирование.</description>
	<lastBuildDate>Mon, 23 Jan 2012 06:49:28 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Сортировка дерева</title>
		<link>http://isaev.asia/treesort/</link>
		<comments>http://isaev.asia/treesort/#comments</comments>
		<pubDate>Thu, 06 May 2010 01:12:14 +0000</pubDate>
		<dc:creator>Isaev A.</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[tree sort]]></category>
		<category><![CDATA[Сортировка дерева]]></category>

		<guid isPermaLink="false">http://isaev.asia/?p=63</guid>
		<description><![CDATA[Решил написать небольшую функцию сортировки элементов дерева, для отображения всего дерева в развернутом виде. Почему решил написать статью &#8211; потому что в интернете ничего путного не нашел на эту тему. На вход функции подается массив. Массив двухмерный В каждой строке первый элемент ID записи, второй parent (ID родителя). Вообщем стандартная структура для хранения деревьев. 3-й [...]]]></description>
			<content:encoded><![CDATA[<p>Решил написать небольшую функцию сортировки элементов дерева, для отображения всего дерева в развернутом виде. Почему решил написать статью &#8211; потому что в интернете ничего путного не нашел на эту тему.</p>
<p>На вход функции подается массив. Массив двухмерный В каждой строке первый элемент ID записи, второй parent (ID родителя). Вообщем стандартная структура для хранения деревьев. 3-й и последующие элементы строки любые значения, имя ветки например.</p>
<p>Попробую объяснить как это работает:<span id="more-63"></span><br />
Берем первую строку массива и сравниваем по порядку id элемента с parent каждой записи до конца массива. Если они совпадают, то запись переносится из найденной позиции, под позицию первого элемента. Далее берем второй элемент и со второй позиции по порядку до конца, ищем совпадение передвигаем запись вверх под родителя.<br />
Таким образом наше дерево как бы нарастает, сначала строится первый уровень , потом второй и так пока нарастать будет нечему.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> treesort <span style="color: #009900;">&#40;</span><span style="color: #000088;">$arr</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span>
		<span style="color: #000088;">$flag</span><span style="color: #339933;">=</span><span style="color: #000088;">$i</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span><span style="color: #339933;">=</span><span style="color: #000088;">$i</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><span style="color: #000088;">$j</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$arr</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #000088;">$arr</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: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<span style="color: #990000;">array_splice</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arr</span><span style="color: #339933;">,</span><span style="color: #000088;">$flag</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arr</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$j</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arr</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$j</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$arr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_values</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arr</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$flag</span><span style="color: #339933;">=</span><span style="color: #000088;">$flag</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$arr</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Пример исходной таблицы:</p>
<style> .examplet td{border: 1px solid #999}; 
</style>
<table class="examplet" cellpadding="3">
<tbody>
<tr>
<td>id</td>
<td>parent</td>
<td>name</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>Group1</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>Group2</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
<td>Group3</td>
</tr>
<tr>
<td>4</td>
<td>1</td>
<td>Room 204</td>
</tr>
<tr>
<td>5</td>
<td>0</td>
<td>Room 301</td>
</tr>
<tr>
<td>6</td>
<td>0</td>
<td>Room 302</td>
</tr>
<tr>
<td>7</td>
<td>1</td>
<td>Room 303</td>
</tr>
<tr>
<td>8</td>
<td>2</td>
<td>Group4</td>
</tr>
<tr>
<td>9</td>
<td>2</td>
<td>Room 401</td>
</tr>
<tr>
<td>10</td>
<td>3</td>
<td>Room 402</td>
</tr>
<tr>
<td>11</td>
<td>8</td>
<td>Room 12</td>
</tr>
</tbody>
</table>
<p>﻿﻿Пример использования функции treesort на практике</p>
<p><a href="/wp-content/uploads/table.gif"><img src="/wp-content/uploads/table.gif" alt="пример использования treesort" title="tabletree" width="348" height="326" class="alignnone size-full wp-image-85" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://isaev.asia/treesort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

