2012-02-21 87 views
1

我有一个数组,看起来像: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') 
    ) 
) 

何我被它的子计数(ASC顺序)排序的父母呢?父母和孩子的名字不应该改变。

+0

的http:// php.net/usort – 2012-02-21 15:25:33

+0

改变了一下问题 – Jasper 2012-02-21 15:28:56

回答

0

试试这个:

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"); 
+0

请看最新的问题 – Jasper 2012-02-21 15:28:09

+3

Steve,如果你问一个问题,expec对它的回应。当你更新你的问题以便与原始问题完全不同时,那些花费精力为你提供超快速答案的人是不公平的。 – ghoti 2012-02-21 15:30:45

0

使用uksort

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

uksort($yourArray, "cmp"); 

要回答这个问题,更新,你可以使用uasort()@fin1te提及。

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

uasort($yourArray, "cmp"); 
+0

更新的笔记呢? – Jasper 2012-02-21 15:28:36

1

使用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; 
}