<?php
const IDX_ID = 0;
const IDX_PARENT = 1;
const IDX_SORT = 4;
$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
function sortMenu($menu, $parentId = 0)
{
$items = array_filter($menu, function($item) use ($parentId) {
return $item[IDX_PARENT] == $parentId;
});
if (0 == count($items)) {
return array();
}
usort($items, function(array $a, array $b) {
if ($a[IDX_SORT] == $b[IDX_SORT]) {
return 0;
}
return $a[IDX_SORT] > $b[IDX_SORT] ? 1 : -1;
});
$result = array();
foreach ($items as $item) {
$result[] = $item;
foreach (sortMenu($menu, $item[IDX_ID]) as $child) {
$result[] = $child;
}
}
return $result;
}
$result = sortMenu($menu);
$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:
50.99 ms | 402 KiB | 5 Q