[2,5,3]
[5,2,3]
它们是相同的,因为它们具有相同的值,但不是以相同的顺序。我可以在不使用带有in_array()的foreach循环的情况下找到答案吗?我认为这不会有效。
答案 0 :(得分:64)
sort($a);
sort($b);
if ($a==$b) {//equal}
答案 1 :(得分:15)
派对有点晚了,但希望它有用:
如果您确定数组只包含字符串或两者都只包含整数,那么array_count_values($a) == array_count_values($b)
具有更好的时间复杂度。但是,user1844933的答案更为通用。
答案 2 :(得分:11)
迟到这个派对。我有同样的问题,但不想排序,这是我知道可行的直接答案。我提出了这个简单的单行,它仅适用于唯一值数组:
$same = ( count( $a ) == count( $b ) && !array_diff( $a, $b ) )
它比sort选项快5倍。这并不是特别慢,所以我想说的更多是关于你的个人偏好以及你认为哪一个更清楚。我个人不愿意排序。
编辑:感谢Ray指出这一事实,这只适用于具有唯一值的数组。
答案 3 :(得分:6)
如果您不想对数组进行排序,但只想检查相等性而不考虑值顺序,请使用http://php.net/manual/en/function.array-intersect.php,如下所示:
$array1 = array(2,5,3);
$array2 = array(5,2,3);
if($array1 === array_intersect($array1, $array2) && $array2 === array_intersect($array2, $array1)) {
echo 'Equal';
} else {
echo 'Not equal';
}
答案 4 :(得分:1)
最好的方法是使用array_diff
http://php.net/manual/en/function.array-diff.php
$arr1 = [2,5,3];
$arr2 = [5,2,3];
$isEqual = array_diff($arr1,$arr2) === array_diff($arr2,$arr1);
答案 5 :(得分:0)
由于给出的答案中没有一个完全是与键无关的重复值(例如[1,1,2]
等于[1,2,2]
),所以我自己写了。
此变体不适用于多维数组。它会检查两个数组是否包含完全相同的值,而不管它们的键和顺序如何,而无需修改任何参数。
function array_equals(array $either, array $other) : bool {
$copy = $either;
foreach ($other as $element) {
$key = array_search($element, $copy, true);
if ($key === false) {
return false;
}
unset($copy[$key]);
}
return empty($copy);
}
尽管该问题询问的是无foreach变体,但没有循环,我找不到满足我要求的任何解决方案。另外,大多数其他使用的函数也在内部使用循环。
答案 6 :(得分:0)
说,如果您有两个这样定义的数组:
$array1 = array(2,5,3);
$array2 = array(5,2,3);
然后,您可以使用这段代码来判断它们是否相等:
if(array_diff($array1,$array2) === array_diff($array2,$array1) &&count($array1)==count($array2))
{
echo 'Equal';
}
else
{
echo 'Not equal';
}
答案 7 :(得分:-2)
我遇到了这个问题并解决了: 我需要确保两个对象具有相同的字段 所以
const expectedFields = ['auth', 'message'];
const receivedFields = Object.keys(data);
const everyItemexists = expectedFields.map(i => receivedFields.indexOf(i) > -1);
const condition = everyItemexists.reduce((accumulator, item) => item && accumulator, true);
基本上,在这里遍历其中一个数组(尽管我假设有相同的大小)。然后检查它是否存在于另一个数组中。然后我减少了结果。
答案 8 :(得分:-3)
$array1 = array(2,5,3);
$array2 = array(5,2,3);
$result = array_diff($array1, $array2);
if(empty($result))
{
echo "Both arrays are equal.";
}
else
{
echo "Both arrays are different.";
}