2012-02-21 89 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; 
}