имеется массив: array(array(1, 0, 'cat1'), array(2, 0, 'cat2'), array(3, 2, 'subcat1'), array(4, 1, 'subcat2'),); array(1, 0, 'cat1') - 1 ид категорий, 0 - ид субкатегорий(0 - домашняя категория), cat1 - имя категорий. нужно отсортировать массив таким образом, чтобы бы соотвественно все категорий и субкатегорий были последовательно. результат сортировки: array(array(1, 0, 'cat1'), array(4, 1, 'subcat2'), array(2, 0, 'cat2'), array(3, 2, 'subcat1')); заранее всем спасибо.
sey, ты хоть сам понял чего куда отсортировать надо? никакой "последовательности", лично, пронаблюдать не могу. Может если курнуть... жаль нечего...
id | parent_id | name 1 | 0 | cat1 2 | 0 | cat2 3 | 1 | sub_cat1 4 | 3 | sub_sub_cat1 5 | 2 | sub_cat2 6 | 0 | cat3 7 | 1 | sub_cat1 после сортировки: id | parent_id | name 1 | 0 | cat1 3 | 1 | sub_cat1 4 | 3 | sub_sub_cat1 7 | 1 | sub_cat1 2 | 0 | cat2 5 | 2 | sub_cat2 6 | 0 | cat3
т.е. в бд есть категорий и подкатегорий(id - id категорий, parent_id - id родительской категорий, name - имя). нужно получить отсортированный массив как показано в примере.
PHP: <? $sql=mysql_query("SELECT * FROM `cats` ORDER BY `id`"); $arr=array(); while($row=mysql_fetch_assoc($sql)) { $arr[]=$row; } function sort_cat($arr,$id=0) { $res=array(); foreach($arr as $val) { if ($val['parent_id']==$id) { $res[]=$val; $res=array_merge($res,sort_cat($arr,$val['id'])); } } return $res; } $arr=sort_cat($arr); ?> наверно можно сделать проще