<?php
$menu = array(
array(1,3,'Wurm 1.1', 2, 10),
array(2,6,'Vogel 2.1', 2, 30),
array(3,0,'Tiger 1', 1, 10),
array(4,6,'Hund 2.2', 2, 40),
array(5,3,'Katze 1.2', 2, 11),
array(6,0,'Pferd 2', 1, 20),
array(7,1,'Baer 1.1.1', 3, 0),
array(8,3,'Schwein 1.3', 2, 12),
array(9,4,'Esel 2.2.1', 3, 0),
);
// Algorithmus hier
$result = array();
function array_orderby()
{
$args = func_get_args();
$data = array_shift($args);
foreach ($args as $n => $field) {
$tmp = array();
foreach ($data as $key => $row)
$tmp[$key] = $row[$field];
$args[$n] = $tmp;
}
$args[] = &$data;
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
function byTopId($items,$id) {
$return = array();
foreach($items as $item) {
if($item[1] == $id) {
$return[] = $item;
}
}
if(count($return) > 0) {
$return = array_orderby($return,4);
}
return $return;
}
function sortMenu($menu,$topid,&$return) {
$items = byTopId($menu,$topid);
foreach($items as $item) {
$return[] = $item;
sortMenu($menu,$item[0],$return);
}
}
$result = array();
sortMenu($menu,0,$result);
$target = array(
array(3,0,'Tiger 1', 1, 10),
array(1,3,'Wurm 1.1', 2, 10),
array(7,1,'Baer 1.1.1', 3, 0),
array(5,3,'Katze 1.2', 2, 11),
array(8,3,'Schwein 1.3', 2, 12),
array(6,0,'Pferd 2', 1, 20),
array(2,6,'Vogel 2.1', 2, 30),
array(4,6,'Hund 2.2', 2, 40),
array(9,4,'Esel 2.2.1', 3, 0),
);
var_dump($result == $target);
preferences:
56.36 ms | 402 KiB | 5 Q