什么PHP代码模拟array_merge_recusive的行为?

时间:2011-10-13 20:56:12

标签: php arrays

我正在尝试做一些事情,而不是在php中使用array_merge_recusive

<?php
$A = array("EUR"=>10);
$B = array("EUR"=>10,"JPY"=>20);    
$C = $A;
foreach ($B as $key => $value) {
    if (!isset($C[$key])) {
        $C[$key][] = array();
    } 
     $C[$key] = $value;

}

var_dump($C);

array(2) {
  ["EUR"]=>
  int(10)
  ["JPY"]=>
  int(20)
}

我需要这样:

array(2) {
  ["EUR"]=>array(10,10),
  ["JPY"]=> int(20)
}

修改

检查我在这里尝试的代码http://codepad.org/x4MuYCiH 我做错了什么,我无法得到预期的结果?

感谢

3 个答案:

答案 0 :(得分:1)

这是正确的代码:

foreach ($B as $key => $value) {
    if (! isset($C[$key]) )
       $C[$key] = $value;
    else
    {
       if (isset($C[$key]) && !is_array($C[$key]) )
          $C[$key] = array($C[$key]);
       $C[$key][] = $value;
    }
}

答案 1 :(得分:1)

对于解决方案,请参阅此粘贴:http://codepad.org/60IKweVu。我还在这个答案的底部显示了代码。此解决方案基于您之前关于此array merge and total if it the same keys的问题中的示例数据。

请注意

array(2) {
  ["EUR"]=>array(10,10),
  ["JPY"]=> int(20)
}

相当于

array(2) {
  ["EUR"]=> array([0] => 10, [1] => 10),
  ["JPY"]=> int(20)
}

但第一种表示法根本没有显示嵌套数组的键。

<强> CODE

<?php
$A = array("EUR"=>10,"USD"=>20);
$B = array("EUR"=>10,"JPY"=>20);

$C = array_merge_recursive($A, $B);
var_dump($C);

//
// This emulates the array_merge_recursive call
//
$C = array();
$allArrays = array($A, $B);
foreach($allArrays as $array) {
    foreach ($array as $key => $value) {
        if (! isset($C[$key])) {
            $C[$key] = array();
        }
        $C[$key][] = $value;
    }
}

foreach ($C as $index => $values) {
    if (count($values) == 1) {
        $C[$index] = $values[0];
    }
}

var_dump($C);

答案 2 :(得分:0)

您正在使用

创建一个空的二级数组
$C[$key][] = array();

然后用

中的单个值覆盖
$C[$key] = $value;

希望这足以暗示......