2013-04-05 268 views
-4

我有阵如何正确使用array_diff_key?

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_*功能。

+7

所得阵列是不可能的,因为同一密钥被添加两次。 – PeeHaa 2013-04-05 08:22:42

+1

由于'array_diff_key',索引6会丢失,索引5丢失了,因为你觉得它? – scones 2013-04-05 08:24:29

回答

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

参考 http://php.net/manual/en/function.array-diff-key.php

0

我怕你问的是不可能的。你的最后一个数组包含两个相同值的键(并且每个键都有相同的值,巧合)。数组必须具有不同值的键,否则它们将简单地相互覆盖。

// impossible: 
$ar = array(
    1 => 1, 
    // ... 
    1 => 1 // this value would overwrite the first 
); 

已经说过,它是很难理解什么是第一和第二阵列之间的关系,所以我不能给出更好的答案。

编辑:斯科恩的答案是正确的(https://stackoverflow.com/a/15829227/932508)。

你可以得到该行的最后一个数组:

$finalArray = $forwardDiff + $backwardDiff; 
+0

请查看问题。 – Miraage 2013-04-05 08:29:09

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

编辑:修为错误的合并功能..

+0

不需要迭代。 – Miraage 2013-04-05 08:30:18

+0

@Miraage你需要迭代。如果任何函数执行迭代,或者您手动执行迭代并不重要。 – scones 2013-04-05 08:32:57

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 
)