PHP - 如何比较两个数组并删除重复值

Lim*_*eni 19 php arrays

所以这是困扰我的.

我有两个数组:

$array1 = array('[param1]' ,'demo' ,'[param2]' ,'some' ,'[param3]');
$array2 = array('value1'   ,'demo' ,'value2'   ,'some' ,'value3');
Run Code Online (Sandbox Code Playgroud)

现在我想比较这两个数组,并删除所有重复的值.
最后我想要这两个数组,但没有'demo'和'some'值.
我想从array-s中删除具有相同索引键和值的所有值.
Array将始终具有相同数量的值和索引,我只想比较它们并从两者中删除具有相同索引键和值的条目.

我现在正在做这样的事情:

$clean1 = array();
$clean2 = array();    

foreach($array1 as $key => $value)
{
    if($value !== $array2[$key])
    {
        $clean1[$key] = $value;
        $clean2[$key] = $array2[$key];
    }
}

var_export($clean1);
echo "<br />";
var_export($clean2);
Run Code Online (Sandbox Code Playgroud)

这有效!但我想知道有没有其他方法这样做?也许没有使用foreach循环?这样做有更优雅的方式吗?

Mr.*_*sta 32

array_unique( array_merge($arr_1, $arr_2) );
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

$arr_1 = array_diff($arr_1, $arr_2);
$arr_2 = array_diff($arr_2, $arr_1);
Run Code Online (Sandbox Code Playgroud)

我猜...

  • $ arr_1 = array_values($ arr_1); 应该管用 (4认同)
  • 这个答案是不正确的,因为即使键不同,它也会删除值。问题询问如何删除具有相同键和值的项目。结果应该是两个数组,其中删除了具有相同键和值的元素。 (3认同)

Sha*_*nas 5

您可以在 PHP 中使用 array_diff 函数,该函数将返回包含两个数组之间相同键的数组。

$clean1 = array_diff($array1, $array2);
Run Code Online (Sandbox Code Playgroud)

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

  • 这将删除第一个参数数组中的唯一元素。 (2认同)
  • 这个答案是不正确的,因为即使键不同,它也会删除值。问题询问如何删除具有相同键和值的项目。 (2认同)