2017-01-31 1 views
1

나는 왜 내가 기대 한대로 내 코드가 작동하지 않는지 알아 내려고하고 있습니다. 나는 배열이 있습니다알파벳순으로 foreach 순서로 PHP를 사용합니다

$persons = array(
    0 => array(
     'person' => 'John', 
     'children' => array('Eve', 'Mark', 'Alto') 
    ), 
    1 => array(
     'person' => 'Susy', 
     'children' => array('Ruby', 'Adam', 'Tõnu') 
    ) 
); 

루프 배열 및 종류

foreach($persons as $person) { 

    usort($person['children'], function($a, $b) { 
     return strcmp($a, $b); 
    }); 
    var_dump($person['children']); //shows children array items alphabetically ordered 

} 

그러나 foreach는 chidrens 후

var_dump($persons); //shows that children names are not ordered alphabetically 

이 시간 내 주셔서 감사

위해 시작 여전히 순으로 어린이

답변

0

foreach 루프가 실제로 배열 val의 복사본을 만듭니다. 루프 내부. 복사본은 정렬되지만 원래 배열은 변경되지 않습니다. documentation에서

foreach ($persons as &$person) { 

: 이렇게하려면 당신은 그것을 &에 참조 할 수 있습니다 각 반복에

, 현재 요소의 값은 $ 값과 내부 배열 포인터입니다 할당 advanced by one ... 루프 내의 배열 요소를 직접 수정하려면 $ value 앞에 &을 입력하십시오. 이 경우 값은 참조로 지정됩니다.

for ($i = 0; $i < count($persons); $i++) { 
    usort($persons[$i]['children']), function($a, $b) { 
     return strcmp($a, $b); 
    }); 
} 
: 직접 배열을 참조하는 또 다른 방법

은 요소 인덱스를 반복하고 참조하는 것입니다
관련 문제