什么PHP代码模拟array_merge_recusive的行为?(What PHP code em

2019-10-31 12:52发布

我想在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我没有什么错,我不能得到预期的结果?

谢谢

Answer 1:

对于解决方案看到这个贴: http://codepad.org/60IKweVu 。 我还显示,在这个答案底部的代码。 该解决方案是基于以前的这个问题示例数据阵列合并和总如果相同的键 。

注意

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);


Answer 2:

这是正确的代码:

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;
    }
}


Answer 3:

你正在创建一个空的第二级阵列

$C[$key][] = array();

然后你用一个值覆盖

$C[$key] = $value;

希望这是暗示足够了...



文章来源: What PHP code emulates the behaviour of array_merge_recusive?
标签: php arrays