2013-06-24 29 views
0

我有這樣的代碼PHP - 意外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_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 
    '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從與第一個數組相同的深度合併元素/數組,但是如果兩個數組的鍵都是數字索引並且它們是相同的,則會附加到它。這就是你的情況正在發生的事情。從那時起你的數組被添加到第二級索引21通過創建索引22找到。要接收你有你的指數21更改爲字符串鍵像PHP手冊

"x21"

注意如果輸入的數組中有相同的字符串鍵所需的輸出,那麼 這些鍵的值合併一起放入一個數組中,並且遞歸執行 ,以便如果其中一個值本身是數組,則 函數會將其與另一個數組 中的對應條目合併。但是,如果數組具有相同的數字鍵,則後面的值不會覆蓋原始值,但會被附加。