我有类似这样的数组:
$array1 = [1,2,3];
$array2 = [3,2,1];
$array3 = [2,1,3];
$array4 = [2,1,3];
$array5 = [1,1,1];
$array6 = [3,3,2];
$array7 = [1,2,1];
$array8 = [8,9,2];
我想检查array2直到array8与array1比较。它应该给我这样的预期回报:
$array2 = [3,2,1]; return 'match'
$array3 = [2,1,3]; return 'match'
$array4 = [2,3,1]; return 'match'
$array5 = [1,1,1]; return 'not match'
$array6 = [3,3,2]; return 'not match'
$array7 = [1,2,1]; return 'not match'
$array8 = [8,9,2]; return 'not match'
我尝试使用array_diff()
进行比较,但有时结果不符合我的预期,尤其是在array2上具有两个相同值的情况下。
注意:array2直到array8必须始终具有array1的所有3个值
答案 0 :(得分:7)
您只需要在比较两个数组之前对其进行排序,例如
sort($array1);
for ($i = 2; $i <= 8; $i++) {
sort(${"array$i"});
echo "array $i: " . ($array1 == ${"array$i"} ? 'match' : 'no match') . "\n";
}
输出:
array 2: match
array 3: match
array 4: match
array 5: no match
array 6: no match
array 7: no match
array 8: no match
答案 1 :(得分:3)
您可以使用array_unique()
,然后使用array_diff()
来完成此任务:
$array1 = array_unique($array1);
$array2 = array_unique($array2);
$result = array_diff($array1, $array2);
array_unique()
的描述:
array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array
array_unique
-从数组中删除重复的值
排序类型标志:
SORT_REGULAR
-正常比较项目(请勿更改类型)SORT_NUMERIC
-数字比较项目SORT_STRING
-将项目作为字符串进行比较SORT_LOCALE_STRING
-根据当前语言环境将项目作为字符串进行比较。答案 2 :(得分:1)
您需要对数组进行排序,以使索引具有可比性。
获取一个父数组并在其中添加所有数组元素。
遍历父数组。
sort()子数组。
比较一下,您会得到结果。
代码:
<?php
$array1 = [1,2,3];
$array2 = [3,2,1];
$array3 = [2,1,3];
$array4 = [2,1,3];
$array5 = [1,1,1];
$array6 = [3,3,2];
$array7 = [1,2,1];
$array8 = [8,9,2];
$arr['array_1'] = [1,2,3];
$arr['array_2'] = [3,2,1];
$arr['array_3'] = [2,1,3];
$arr['array_4'] = [2,1,3];
$arr['array_5'] = [1,1,1];
$arr['array_6'] = [3,3,2];
$arr['array_7'] = [1,2,1];
$arr['array_8'] = [8,9,2];
$find = [1,2,3];
if (! empty($arr)) {
foreach ($arr as $key => $elem) {
sort($arr[$key]);
if ($arr[$key] == $find) {
echo "<br/>[" . implode(',', $elem) . "]: Match";
}
else {
echo "<br/>[" . implode(',', $elem) . "]: No Match";
}
}
}
输出:
[1,2,3]: Match
[3,2,1]: Match
[2,1,3]: Match
[2,1,3]: Match
[1,1,1]: No Match
[3,3,2]: No Match
[1,2,1]: No Match
[8,9,2]: No Match
答案 3 :(得分:1)
虽然可以使用array_diff,但是有一种比较简单的方法可以比较两个可以使用==
<?php
$array1 = [1,2,3];
$array2 = [3,2,1];
$array3 = [2,1,3];
$array4 = [2,1,3];
$array5 = [1,1,1];
$array6 = [3,3,2];
$array7 = [1,2,1];
$array8 = [8,9,2];
for($i = 2; $i <= 8; ++$i) {
sort(${"array$i"});
echo ${"array$i"} == $array1 ? 'match' : 'not match';
echo PHP_EOL;
}
输出:
match
match
match
not match
not match
not match
not match
$ a == $ b相等如果$ a和$ b具有相同的键/值对,则为TRUE。
$ a === $ b身份如果$ a和$ b具有相同顺序和相同类型的相同键/值对,则为TRUE。
答案 4 :(得分:0)
最快的方法是将数组转换为关联数组。您可以使用array_flip
函数来实现它。然后,您只需要使用array_diff_key
检查密钥之间的差异即可快速完成。例如:
$array1 = [1,2,3];
$array2 = [3,2,1];
$array3 = [2,1,3];
$array4 = [2,1,3];
$array5 = [1,1,1];
$array6 = [3,3,2];
$array7 = [1,2,1];
$array8 = [8,9,2];
var_dump(
empty( // if it's empty then the arrays are identical
array_diff_key(array_flip($array1), array_flip($array5))
)
);
但这仅在您不关心任何数组是否包含重复值的情况下才有效。如果元素的数量或顺序很重要,那么这将无效。
答案 5 :(得分:0)
首先需要使用php array_unique 函数减少每个数组中的重复数据 然后使用 array_diff 函数
区分两个数组<?php
$firstArray = array_unique($firstArray);
$secondArray = array_unique($secondArray);
$arrayDiff = array_diff($firstArray, $secondArray);
?>