Массив сортировки PHP ()

У меня есть массив, который выглядит так:

array( 'parent1' => array( name = 'somename', childs = array('child1', 'child2', 'child3', 'child4') ), 'parent2' => array( name = 'somename', childs = array('child1') ), 'parent3' => array( name = 'somename', childs = array('child1', 'child2', 'child3', 'child4', 'child5') ) 'parent4' => array( name = 'somename', childs = array('child1', 'child2', 'child3') ), 'parent5' => array( name = 'somename', childs = array('child1', 'child2', 'child3', 'child4', 'child5', 'child6', 'child7') ) ) 

Хо, я сортирую родителей по подсчетам своих детей (порядок ордера)? Имена родителей и детей не должны изменяться.

Попробуй это:

 function count_sort($a, $b) { if (count($a) == count($b)) { return 0; } return (count($a) < count($b)) ? -1 : 1; } $test_array = array( 'parent1' => array('child1', 'child2', 'child3', 'child4'), 'parent2' => array('child1'), 'parent3' => array('child1', 'child2', 'child3', 'child4', 'child5'), 'parent4' => array('child1', 'child2', 'child3'), 'parent5' => array('child1', 'child2', 'child3', 'child4', 'child5', 'child6', 'child7') ); print_r($test_array); usort($test_array, "count_sort"); print_r($test_array); 
 function cmp($a, $b) { if (count($a) == count($b)) { return 0; } return (count($a) < count($b)) ? -1 : 1; } uksort($array, "cmp"); 

Используйте uasort – он сортирует массив и поддерживает ключевые asscociations (так что вы не потеряете ключи)

 uasort($myArray, 'countSort'); function countSort($a, $b) { if (count($a['childs']) == count($b['childs'])) { return 0; } return (count($a['childs']) < count($b['childs'])) ? -1 : 1; } 

использовать uksort :

 function cmp($a, $b) { return count($a) - count($b); } uksort($yourArray, "cmp"); 

Чтобы ответить на обновленный вопрос, вы должны использовать uasort() как @fin1te в @fin1te .

 function cmp($a, $b) { return count($a['childs']) - count($b['childs']); } uasort($yourArray, "cmp");