我有兩個數組要比較兩個陣列,同時考慮重複值
$array1 = array(1, 2, 2, 3);
$array2 = array(1, 2, 3,4);
,做的時候:
var_dump(array_diff($array1, $array2));
越來越:
array(0){}
的輸出,但我期待的:
array(1){[2]=>2}
有人可以請讓我知道如何做到這一點提前
我有兩個數組要比較兩個陣列,同時考慮重複值
$array1 = array(1, 2, 2, 3);
$array2 = array(1, 2, 3,4);
,做的時候:
var_dump(array_diff($array1, $array2));
越來越:
array(0){}
的輸出,但我期待的:
array(1){[2]=>2}
有人可以請讓我知道如何做到這一點提前
試試這個
$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)
謝謝雖然它可能不那麼優雅,簡單的方法做,這是一個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]; }
}
這將讓你期望的結果:
$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_count_values
會計算一個數組中所有的值,這將是這樣的:
Array ( [1] => 1 [2] => 2 [3] => 1 ) Array ( [1] => 1 [2] => 1 [3] => 1 [4] => 1 )
然後,我們通過每個array_count_values
迭代來定位出現多於值一旦。這將工作當你有一組以上的重複值的:如果你想從計算重複的元素的數量
$array1 = array(1, 2, 2, 3);
$array2 = array(1, 2, 3, 4, 3);
結果
Array ( [0] => 2 [1] => 3 )
相同陣列以及多個陣列,請使用下面的代碼,
<?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);
?>
你爲什麼期待'array(2)'?在兩個數組中都找到了'2',因此不會在差異中找到。而已。 –
'arary_diff'返回一個數組,其中包含來自'array1'的所有條目,其**不存在於任何其他數組中。 – Kermit
是的,array_diff返回一個數組,其中包含array1中不存在於任何其他數組中的所有條目,但是我也需要檢查重複值,並且array_diff沒有滿足這個要求,所以尋找替代方案 – user522170