3v4l.org

run code in 300+ PHP versions simultaneously
<?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