Php 在考虑重复值时比较两个数组

Php 在考虑重复值时比较两个数组,php,Php,我有两个数组 $array1 = array(1, 2, 2, 3); $array2 = array( 1, 2, 3,4); 什么时候: var_dump(array_diff($array1, $array2)); 获取: array(0){} 作为输出,但我正在寻找: array(1){[2]=>2} 有人能告诉我怎么做吗 提前感谢虽然它可能不那么优雅,但实现这一点的简单方法是使用for循环: $diff_array = array(); for ($i = 0; ($

我有两个数组

$array1 = array(1, 2,  2, 3);
$array2 = array( 1, 2,  3,4);
什么时候:

var_dump(array_diff($array1, $array2));
获取:

array(0){}
作为输出,但我正在寻找:

array(1){[2]=>2}
有人能告诉我怎么做吗


提前感谢

虽然它可能不那么优雅,但实现这一点的简单方法是使用for循环:

$diff_array = array();
for ($i = 0; ($i < count($array1)) and ($i < count($array2)); $i++)
{
   if ($array1[$i] !== $array2[$i]) { $diff_array[$i] = $array1[$i]; }
}
$diff_array=array();
对于($i=0;($i
这将为您提供所需的结果:

$array1 = array(1, 2,  2, 3);
$array2 = array( 1, 2,  3,4);

$countArray1 = array_count_values($array1);
$countArray2 = array_count_values($array2);

foreach($countArray1 as $value=>$count) {
    if($count > 1) $dupArray[] = $value;
}

foreach($countArray2 as $value=>$count) {
    if($count > 1) $dupArray[] = $value;
}

print_r($dupArray);
结果

Array ( [0] => 2 ) Array ( [0] => 2 [1] => 3 ) 然后,我们迭代每个
数组\u count\u值
,以定位出现多次的值。当您有多组重复值时,这将起作用:

$array1 = array(1, 2,  2, 3);
$array2 = array( 1, 2,  3, 4, 3);
结果

Array ( [0] => 2 ) Array ( [0] => 2 [1] => 3 ) 排列 ( [0] => 2 [1] => 3 ) 试试这个

$array1 = array(1, 2, 2, 3, 4, 5, 5, 7);
$array2 = array(1, 2, 4, 6, 3, 3, 5);
$diff = array_filter($array1, 
  function ($val) use (&$array2) { 
    $key = array_search($val, $array2);
    if ( $key === false ) return true;
    unset($array2[$key]);
    return false;
  }
);
print_r($diff);
// Array ( [2] => 2 [6] => 5 [7] => 7 )

如果要计算同一数组和多个数组中重复元素的数量,请使用以下代码

<?php
    $array1 = array(1,2,2,3,7);
    $array2 = array(1,2,3,4);
    $diff_array = array();

    $diff_array1 = array_count_values($array1);
    $diff_array2 = array_count_values($array2);

    $a = array_keys($diff_array1);
    $b = array_keys($diff_array2);

    for($i=0;$i<count($a);$i++)
    {
        if($a[$i] == $b[$i])
        {
            $x = $a[$i];
            $y = $b[$i];
            $diff_array1[$x] += $diff_array2[$y];
        }
    } 
    $diff_array1=array_diff($diff_array1, array('1'));
    echo '<pre>';
    print_r($diff_array1);
?>


您为什么期望阵列(2)
2
在两个数组中都可以找到,因此不会在差异中找到它。就是这样。
arary\u diff
返回一个数组,其中包含来自
array1
的所有条目,这些条目在任何其他数组中都不存在。是的,array\u diff返回一个数组,其中包含来自array1的所有条目,这些条目在任何其他数组中都不存在,但我还需要检查重复的值,而数组_diff没有满足这一要求,这就是为什么要寻找一些替代方案,如果数组大小不同呢?此代码将返回
3
。OP查找的是重复值,而不是每个数组之间的差异。此方法的优点是您可以控制自己的操作。如果数组大小不同,您可以执行以下操作,例如:($i