我有这些数组,我想组合它们并创建一个数组结果。
$a[2][3][4][5] = Array('amt' => 20, 'comm' => 10);
$b[2][3] = Array('amt' => 30, 'comm' => 20);
$c[2][3][4][6] = Array('amt' => 40, 'comm' => 30);
$d[2][3][7] = Array('amt' => 50, 'comm' => 40);
我曾尝试使用array_merge_recursive()
,但没有运气。
我的预期结果是:
[2] => Array(
[3] => Array (
[amt] => 30,
[comm] => 20,
[4] => Array (
[5] => Array(
[amt] => 20,
[comm] => 10
),
[6] => Array(
[amt] => 40,
[comm] => 30
)
),
[7] => Array(
[amt] => 50,
[comm] => 40
)
)
)
我只想要合并所有相同的键并生成一个组合结果
答案 0 :(得分:1)
而不是array_merge_recursive()
,您应该使用array_replace_recursive()
:
$result = array_replace_recursive($a, $b, $c, $d);
在您的情况下,它的行为就像您为每项作业替换了$a
.. $b
$result
。
答案 1 :(得分:0)
很难说明你使用的是什么,或者为什么你的数组是这样设置的,但我认为没有一种简单的方法可以在不编写自己的代码的情况下做你想做的事情。这有几个原因。
1)您的阵列结构不同。例如,要从数组$ a和$ b中获取“comm”值,您将使用这些变量:
$a[2][3][4][5]['comm'] // equals 10
$b[2][3]['comm'] // equals 20
2)如果要合并它们,最终的数组将由具有值和更多数组的数组组成。这不是问题,但它确实使事情变得更加复杂。另外,通常当你把阵列放在一起很困难时,从中获取数据也同样困难。
3)同样,很难说明你使用它的是什么,但是将每个数据数组添加到同一个单维数组会更容易吗?所以结果看起来像这样:
Array (
[0] = Array('amt' => 20, 'comm' => 10),
[1] = Array('amt' => 30, 'comm' => 20),
[2] = Array('amt' => 40, 'comm' => 30),
[3] = Array('amt' => 50, 'comm' => 40)
)
如果没有更简单的方法可以做到这一点,那么最好的办法是在彼此内部制作四个循环(每个阵列尺寸一个)。在每个循环内部确定数据是否是包含更多数组的数组,或者是否是包含要添加的值的数组。如果它的值然后将它们添加到合并的数组,如果它只是另一个数组然后添加一个空数组并继续下一个循环。它有点难以解释,但写出来将永远带我。