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 YqCfD
Output for 4.3.0 - 5.2.17, 5.3.4 - 7.3.0rc4
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/5ANUC on line 28 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/5ANUC on line 28 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/5ANUC on line 28 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/5ANUC on line 28 Warning: Parameter 1 to array_multisort() expected to be a reference, value given in /in/5ANUC on line 28 bool(true)