2012-03-25 42 views
0

我有3個陣列是這樣的:爲什麼array_merge_recursive這樣工作?

第一

Array 
(
    [0695] => Array 
     (
      [loan_number] => 0695 
      [start_date] => 2011-12-25 
     ) 
) 

第二

Array 
(
    [0695] => Array 
     (
      [name] => '' 
      [address] => '' 
     ) 
) 

第三

Array 
(
    [0695] => Array 
     (
      [items] => Array 
       (
        [0] => Array 
         (
          [item] => '' 
          [qty] => '' 
          [price] => '' 
         ) 
       ) 
     ) 
) 

array_merge_recursive(array1,array2,array3)生產:

Array 
(
    [0695] => Array 
     (
      [loan_number] => 0695 
      [start_date] => 2011-12-25 
      [name] => '' 
      [address] => '' 
      [items] => Array 
       (
        [0] => Array 
         (
          [item] => '' 
          [qty] => '' 
          [price] => '' 
         ) 
       ) 
     ) 
) 

但如果數組鍵都是這樣

Array 
(
    [1685] => Array 
     (
      [loan_number] => 1685 
      [start_date] => 2011-12-25 
     ) 
) 

Array 
(
    [1685] => Array 
     (
      [name] => '' 
      [address] => '' 
     ) 
) 

Array 
(
    [1685] => Array 
     (
      [items] => Array 
       (
        [0] => Array 
         (
          [item] => '' 
          [qty] => '' 
          [price] => '' 
         ) 
       ) 
     ) 
) 

這樣

Array 
(
    [0] => Array 
     (
      [loan_number] => 1685 
      [start_date] => 2011-12-25 
     ) 

    [1] => Array 
     (
      [name] => '' 
      [address] => '' 
     ) 

    [2] => Array 
     (
      [items] => Array 
       (
        [0] => Array 
         (
          [item] => '' 
          [qty] => '' 
          [price] => '' 
         ) 
       ) 
     ) 
) 

此產品導致的任何想法,爲什麼發生這種情況以及如何防止這一點,得到的結果是第一個?

回答

2

documentation

然而,如果數組具有相同的數字鍵,後面的值將不會覆蓋原來的值,但將被追加。

「0695」不是數字鍵,而是「1685」。

first comment(實際上大多數的意見),該網頁上介紹了一種變通方法。

+0

我試着用用笨一次我打電話功能即時得到500內部服務器錯誤 – 2012-03-25 19:36:08

+2

看來你有問題正確的第一功能和IM,但我不喜歡你的解釋。 '0695'是當然可以用'的var_dump很容易地檢查一個數字值(is_numeric(0695));',其輸出TRUE;。 achana問題在於Gihana可能使用了兩個字符串「0695」和「1685」作爲關鍵字。在這兩個字符串中,當PHP用作關鍵字時,後者將被轉換爲整數。我個人會認爲這是一個錯誤,或者至少是PHP開發人員的愚蠢。再次它可以與'的var_dump(的GetType(密鑰(陣列( 「1685」=>空))))',其輸出'integer'代替'string'進行檢查。 – Basti 2012-03-25 19:43:21

+1

那麼肯定,但我說:「0695是不是一個數字** **鍵」。但是,這是完整的故事,是的。 – JJJ 2012-03-25 19:45:27