3v4l.org

run code in 500+ 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);
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.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
bool(true)

preferences:
122.82 ms | 2123 KiB | 4 Q