2012-02-21 3 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') 
    ) 
) 

호? 부모 및 자녀 이름을 변경하면 안됩니다.

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