2012-02-21 3 views
1

J'ai un tableau qui ressemble à:tri du tableau 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') 
    ) 
) 

Ho-je trier les parents par son nombre Childs (ordre asc)? Les noms des parents et des enfants ne doivent pas être modifiés.

+0

http: // php.net/usort –

+0

a changé la question un peu – Jasper

Répondre

0

Essayez ceci:

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

s'il vous plaît voir la question mise à jour – Jasper

+3

Steve, si vous posez une question, expec t réponses à cela. Quand vous mettez à jour votre question pour qu'elle soit complètement différente de l'original, ce n'est pas juste pour les gens qui ont déployé des efforts pour vous donner des réponses ultra-rapides à la question originale. – ghoti

0

utilisation uksort:

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

uksort($yourArray, "cmp"); 

Pour répondre à la question mise à jour, vous devez utiliser uasort() comme @fin1te mentionné.

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

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

qu'en est-il d'une note mise à jour? – Jasper

1

Utilisez uasort - il trie le tableau et maintient asscociations clés (de sorte que vous ne perdrez pas vos clés)

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