2012-02-21 26 views
1

I持っているように見えるの配列:私はそのチャイルズ数(ASC順)で親を並べ替えるん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') 
    ) 
) 

ホー?親と子の名前は変更しないでください。

+0

にhttp:// php.net/usort –

+0

変更された質問 – Jasper

答えて

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

+3

スティーブ、あなたが質問をする場合は、expecを参照してくださいそれに対する応答。質問を更新して元のものとまったく異なるものにすると、元の質問にあなたが超高速で答えるための努力をした人々にとって公平ではありません。 – ghoti

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

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