问题
I have an array which looks like:
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')
)
)
Ho do I sort parents by its childs count (asc order)? Parents and childs names should not be changed.
回答1:
Try this:
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);
回答2:
function cmp($a, $b)
{
if (count($a) == count($b)) {
return 0;
}
return (count($a) < count($b)) ? -1 : 1;
}
uksort($array, "cmp");
回答3:
Use uasort - it sorts the array and maintains key asscociations (so you won't lose your keys)
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;
}
回答4:
use uksort
:
function cmp($a, $b)
{
return count($a) - count($b);
}
uksort($yourArray, "cmp");
To answer the updated question, you would use uasort()
as @fin1te
mentioned.
function cmp($a, $b)
{
return count($a['childs']) - count($b['childs']);
}
uasort($yourArray, "cmp");
来源:https://stackoverflow.com/questions/9380106/php-sort-array