我正在尝试做一些事情,而不是在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 我做错了什么,我无法得到预期的结果?
感谢
答案 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;
希望这足以暗示......