3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?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);
based on PTuRc
Output for 4.3.0 - 5.2.17, 5.3.4 - 7.2.0
bool(true)
Output for 5.3.0 - 5.3.3
Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/YqCfD on line 29 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/YqCfD on line 29 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/YqCfD on line 29 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/YqCfD on line 29 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/YqCfD on line 29 bool(true)