2013-06-24 2 views
0

나는 결과가PHP - 예기치 않은 array_merge_recursive() 출력

array 
    'foo' => 
    array 
     21 => 
     array 
      1 => 
      array 
       0 => int 1 
       1 => int 2 
       2 => int 3 
       3 => int 4 
       4 => int 5 
      7 => 
       0 => int 6 
       1 => int 7 
       2 => int 8 
       3 => int 9 
       4 => int 10 

대신 나는이

을 얻을 것이 코드를 내가 array_merge_recursive(), 내가 기대하고의 이해 것과

$a1 = array(
    'success' => TRUE, 
    'data'  => array(
     'foo' => 
     array(
      21 => 
      array(
       1 => 
       array(1, 2, 3, 4, 5) 
      ) 
     ) 
    ) 
); 

$a2 = array(
    'success' => TRUE, 
    'data'  => array(
     'foo' => 
     array(
      21 => 
      array(
       7 => 
       array(6, 7, 8, 9, 10) 
      ) 
     ) 
    ) 
); 

$results = array(); 
$results = array_merge_recursive($results, $a1['data']); 
$results = array_merge_recursive($results, $a2['data']); 
var_dump($results); 

array 
    'foo' => 
    array 
     21 => 
     array 
      1 => 
      array 
       0 => int 1 
       1 => int 2 
       2 => int 3 
       3 => int 4 
       4 => int 5 
     22 => 
     array 
      7 => 
      array 
       0 => int 6 
       1 => int 7 
       2 => int 8 
       3 => int 9 
       4 => int 10 

22 색인은 어디에서 왔습니까? 다르게 출력되는 이유는 무엇입니까? 함수를 잘못 사용 했습니까?

답변

1

array_merge_recursive은 첫 번째 배열과 동일한 깊이의 요소/배열을 병합하지만 두 배열 모두 키가 숫자 인덱스이며 동일한 경우 추가됩니다. 이것은 귀하의 상황에서 일어나는 일입니다. 그 이후 배열은 색인 22을 작성하여 인덱스 21이있는 2 레벨에 추가됩니다. 당신이 입력 배열이 같은 문자열 키가있는 경우 PHP 매뉴얼

에서 "x21"

노트처럼 문자열 키에 인덱스 21 변경이 원하는 출력을 수신하려면 다음 이 키에 대한 값이 병합됩니다 함께반복적으로 이루어 지므로 값 중 하나가 배열 자체 인 경우 함수는 다른 배열의 해당 항목과 병합합니다. 도 마찬가지입니다. 그러나 배열에 동일한 숫자 키가 있으면 값은 원래 값을 덮어 쓰지 않지만 추가됩니다.