У меня есть массив, который выглядит так:
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");