2012-03-25 43 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