我有阵列
array (
500 =>
array (
1 => 1,
6 => 2,
2 => 1,
),
550 =>
array (
3 => 1,
6 => 2,
4 => 1,
5 => 1,
),
)
我怎样才能得到下一个结果?
array(
1 => 1,
2 => 1,
3 => 1,
4 => 1,
5 => 1,
)
我正在尝试使用array_diff_key
/ array_intersect_key
,但无法实现目标。
有什么建议吗?
UPD。
我不需要迭代。仅限直接array_*
个功能。
答案 0 :(得分:1)
你可能正在寻找联盟和关键交叉点的关键区别:
$array = array_diff_key(
($a = $array['500']) + ($b = $array['550']),
array_intersect_key($a, $b)
);
对于您的输入数组,这将提供所需的输出(Demo):
Array
(
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 1
)
答案 1 :(得分:0)
<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2));
?>
以上示例将输出:
array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}
答案 2 :(得分:0)
我担心你会问不可能的事情。您的最终数组包含两个具有相等值的键(并且每个键具有相同的值,巧合)。数组必须具有不同值的键,否则它们将简单地相互覆盖。
// impossible:
$ar = array(
1 => 1,
// ...
1 => 1 // this value would overwrite the first
);
说过很难理解第一个和第二个数组之间的关系是什么,所以我无法给出更好的答案。
编辑:斯科恩的答案是正确的(https://stackoverflow.com/a/15829227/932508)。
您可以使用以下行获取最终数组:
$finalArray = $forwardDiff + $backwardDiff;
答案 3 :(得分:0)
这应该有效
$foo = array (
500 =>
array (
1 => 1,
6 => 2,
2 => 1,
),
550 =>
array (
3 => 1,
6 => 2,
4 => 1,
5 => 1,
),
);
$bar = array();
$forwardDiff = array_diff_key($foo[500], $foo[550]);
$backwardDiff = array_diff_key($foo[550], $foo[500])
foreach (array_merge($forwardDiff, $backwardDiff) as $key) {
$bar = isset($foo[500][$key]) ? $foo[500][$key] : $foo[550][$key];
}
编辑:修复错误的合并功能..