<?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);
- Output for 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
- bool(true)
preferences:
240.58 ms | 404 KiB | 339 Q