请问,如果两个数组相等而忽略重复数字,我该怎么比较?然后输出唯一的比较值和唯一不同的值。
$ a1 =数组(1,2,9,2,4,5,5,7);
$ a2 =数组(1,2,4,3,3,5,6,7,9,2);
比较值= 1,2,4,5,7,9
差异= 3,6
output = false
我试过$ a1 == $ a2
我也尝试了各种各样的方法,但他们并没有做好。
答案 0 :(得分:4)
要忽略重复的数字,首先要通过array_unique
运行每个数组。
$a1 = array_unique($a1);
$a2 = array_unique($a2);
如果需要保留原始值,可以将唯一数组分配给新变量。
现在,找到共同的元素很容易:
$compared_values = array_intersect($a1, $a2);
但找到差异是有点棘手。 array_diff
返回其第一个参数中的值,这些值不会出现在后续参数中。因此,根据参数的顺序,它可能会返回不同的结果。 (例如,array_diff([1], [1, 2, 3]);
的结果将是一个空数组。)
为了确保获得完整的差异,您可以合并两种方式的结果。
$differences = array_merge(array_diff($a1, $a2), array_diff($a2, $a1));
要查看两个数组是否包含相同的不同值集,您只需将$differences
计算为布尔值即可。如果它是空的,它将被评估为假,反之亦然。
$output = !$differences;
否定它会将其隐式地转换为布尔值,因此如果存在任何差异则为false
,如果它为空则为{。
您尝试的方式$a1 == $a2
无法正常工作,因为PHP中的array equality表示两个数组具有相同的键/值对。重复的值和不同的顺序(因此不同的键)将阻止它们相等。
答案 1 :(得分:3)
那好吧......我至少要写一些利用过多PHP数组函数的东西...
<?php
$a1 = array(1, 2, 9, 2, 4, 5, 5, 7);
$a2 = array(1, 2, 4, 3, 3, 5, 6, 7, 9, 2);
$diff = array_diff($a2, $a1);
sort($a1);
echo 'compared values = ' . implode(",", array_unique($a1)) . '<br>';
echo 'differences = ' . implode(",", array_unique($diff)) . '<br>';
//?
$output = (empty($diff)) ? 'true' : 'false';
echo 'output = ' . $output;
比较值= 1,2,4,5,7,9
差异= 3,6
output = false
答案 2 :(得分:2)
这是非常难看的代码,就像我为你做了一个概念验证,我会让你优化以满足你的需求。这将为您提供预期的结果。我希望它有所帮助。 *当数组不相同时,我只假设output = false。如果我错了,请随时告诉我。
//Array 1
$a1 = array(1, 2, 9, 2, 4, 5, 5, 7);
//Array 2
$a2 = array(1, 2, 4, 3, 3, 5, 6, 7, 9, 2 );
//To get your example results, they need to be sorted and the duplicates removed.
$a1 = array_unique($a1);
$a2 = array_unique($a2);
sort($a1);
sort($a2);
//Get smaller array as array1
$array1 = (sizeof($a1) > sizeof($a2)) ? $a1:$a2;
//Get bigger array as array2
$array2 = (sizeof($a1) < sizeof($a2)) ? $a1:$a2;
//Check the difference between each.
$diff = array_diff($array1, $array2);
echo "Compared values = " . implode(',', array_intersect($a1, $a2)).PHP_EOL;
echo "differences = " . implode(',', $diff).PHP_EOL;
echo "output = " . (($diff) ? "false" : "true");