Welcome to php club

PHP FAQ from PHPclub.ru: Tree/DemoSort ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Деревья в базах данных => Примеры скриптов => Сортировка массива

Сортировка массива, в котором хранится дерево


В некоторых случаях бывает неудобно сортировать дерево непосредственно при выборке. В таком случае его можно отсортировать после того, как Вы его загрузили в память.


Например, если при использовании Вложенных множеств Вы хотите использовать возможность выборки поддерева одним запросом (или выборки всего дерева одним запросом) и при этом хотите отсортировать вершины не в таком порядке, как задано структурой дерева.


Эта функция может также быть использована, если Вы выбираете из дерева, которое представлено в виде списков смежностей более чем один уровень, например, поддерево.


На вход этой функции подаётся массив, в котором хранится дерево. Этот массив описан в разделе
Внутреннее представление деревьев в программах


<?php

// Внутри этой функции Вы можете задать свой способ сравнения вершин дерева
// Эта функция возвращает 
// 0, если вершины дерева равны,
// 1, если вершина $a должна быть расположена после вершины $b
//    то есть, вершина $a - "больше", чем вершина $b
// -1, если вершина $b должна быть расположена после вершины $a
//    то есть, вершина $a - "меньше", чем вершина $b
function _tree_sort($a,$b)
{
  if(
$a['s_name']==$b['s_name'])
    return 
0;
  elseif(
$a['s_name']>$b['s_name'])
    return 
1;
  else
    return -
1;
}

function 
tree_sort(&$a_tree)
{
  if(!
count($a_tree)) return;

  
usort($a_tree,'_tree_sort');
  for(
$i=0;$i<count($a_tree);$i++)
  {
    
//Повторная проверка - чтобы избежать лишних рекурсивных вызовов функции
    
if(count($a_tree[$i]['a_tree']))
      
tree_sort($a_tree[$i]['a_tree']);
  }
}

?>


 
Комментариев нет. [Показать комментарии/форму]