PHP - 检查两个数组是否相等
我想检查两个数组是否相等。 我的意思是:相同的大小,相同的索引,相同的值。 我怎样才能做到这一点?
根据用户的建议使用===,如果数组中至少有一个元素不同,我希望以下内容将打印输入,但事实上并非如此。
if (($_POST['atlOriginal'] !=== $oldAtlPosition)
or ($_POST['atl'] !=== $aext)
or ($_POST['sidesOriginal'] !=== $oldSidePosition)
or ($_POST['sidesOriginal'] !=== $sideext)) {
echo "enter";
}
markzzz asked 2019-03-08T07:00:37Z
13个解决方案
402 votes
$arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs.
$arraysAreEqual = ($a === $b); // TRUE if $a and $b have the same key/value pairs in the same order and of the same types.
请参见数组运算符。
编辑
不等式运算符为!=,而非标识运算符为!==以匹配相等性运算符==和标识运算符===。
Stefan Gehrig answered 2019-03-08T07:01:00Z
66 votes
根据这个页面。
注意:接受的答案适用于关联数组,但它不能像索引数组那样工作(如下所述)。 如果要比较它们中的任何一个,请使用此解决方案。 此外,此函数可能无法用于多维数组(由于array_diff函数的性质)。
使用array(0 => "x", 1 => "y")或array(0 => "y", 1 => "x")测试两个索引数组,哪些元素的顺序不同,例如:
(array("x","y") == array("y","x")) === false;
?>
那是因为上述意思是:
array(0 => "x", 1 => "y") vs. array(0 => "y", 1 => "x")。
要解决该问题,请使用:
function array_equal($a, $b) {
return (
is_array($a)
&& is_array($b)
&& count($a) == count($b)
&& array_diff($a, $b) === array_diff($b, $a)
);
}
?>
添加了比较数组大小(由super_ton建议),因为它可以提高速度。
lepe answered 2019-03-08T07:02:10Z
30 votes
尝试序列化。 这也将检查嵌套的子数组。
$foo =serialize($array_foo);
$bar =serialize($array_bar);
if ($foo == $bar) echo "Foo and bar are equal";
Iggi answered 2019-03-08T07:02:37Z
9 votes
!===将无法正常工作,因为它是语法错误。 正确的方法是!==(不是三个“等于”符号)
Sodhi saab answered 2019-03-08T07:03:04Z
9 votes
将它们与其他值进行比较:
if($array_a == $array_b) {
//they are the same
}
您可以在这里阅读所有数组运算符:[http://php.net/manual/en/language.operators.array.php]例如,===还检查数组中元素的类型和顺序是否相同。
Emil Vikström answered 2019-03-08T07:03:38Z
8 votes
您可以使用array_diff_assoc来检查两者之间的差异。
jeroen answered 2019-03-08T07:04:05Z
4 votes
工作简短的解决方案,即使对于以不同顺序给出键的数组也是如此:
public static function arrays_are_equal($array1, $array2)
{
array_multisort($array1);
array_multisort($array2);
return ( serialize($array1) === serialize($array2) );
}
Samuel Vicent answered 2019-03-08T07:04:32Z
2 votes
无论值顺序如何,检查相等性的另一种方法是使用[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';
}
这是一个使用多维数组的版本[http://php.net/manual/en/function.array-uintersect.php:]
$array1 = array(
array(5, 2),
array(3, 6),
array(2, 9, 4)
);
$array2 = array(
array(3, 6),
array(2, 9, 4),
array(5, 2)
);
if($array1 === array_uintersect($array1, $array2, 'compare') && $array2 === array_uintersect($array2, $array1, 'compare')) {
echo 'Equal';
} else {
echo 'Not equal';
}
function compare($v1, $v2) {
if ($v1===$v2) {
return 0;
}
if ($v1 > $v2) return 1;
return -1;
}
whitebrow answered 2019-03-08T07:05:06Z
1 votes
一种方法:(为[http://tools.ietf.org/html/rfc6902#section-4.6]实施“被认为是平等的”]
这种方式允许其成员排序不同的关联数组 - 例如 他们被认为在每种语言中都是平等的但是php :)
// recursive ksort
function rksort($a) {
if (!is_array($a)) {
return $a;
}
foreach (array_keys($a) as $key) {
$a[$key] = ksort($a[$key]);
}
// SORT_STRING seems required, as otherwise
// numeric indices (e.g. "0") aren't sorted.
ksort($a, SORT_STRING);
return $a;
}
// Per http://tools.ietf.org/html/rfc6902#section-4.6
function considered_equal($a1, $a2) {
return json_encode(rksort($a1)) === json_encode(rksort($a2));
}
Mike McCabe answered 2019-03-08T07:05:43Z
1 votes
array_diff - 计算数组的差异
[http://php.net/manual/en/function.array-diff.php]
array1
将array1与一个或多个其他数组进行比较,并返回array1中任何其他数组中均无显示的值。
Dmitriy Naumov answered 2019-03-08T07:06:34Z
1 votes
if (array_diff($a,$b) == array_diff($b,$a)) {
// Equals
}
if (array_diff($a,$b) != array_diff($b,$a)) {
// Not Equals
}
从我的pov开始,使用array_diff比使用array_intersect更好,因为通过检查这种性质,返回的差异通常小于相似之处,这样bool转换就会减少内存消耗。
编辑请注意,此解决方案适用于普通数组,并补充上面发布的==和===,仅对字典有效。
Marcos Fernandez Ramos answered 2019-03-08T07:07:10Z
0 votes
使用php函数array_diff(array1,array2);
它将返回数组之间的差异。 如果它是空的那么它们是平等的。
例:
$array1 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3'
);
$array2 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value4'
);
$diff = array_diff(array1, array2);
var_dump($diff);
//it will print array = (0 => ['c'] => 'value4' )
例2:
$array1 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$array2 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$diff = array_diff(array1, array2);
var_dump($diff);
//it will print empty;
Wolfgang Leon answered 2019-03-08T07:07:48Z
0 votes
阵列上的语法问题
$array1 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$array2 = array(
'a' => 'value1',
'b' => 'value2',
'c' => 'value3',
);
$diff = array_diff($array1, $array2);
var_dump($diff);
YEFFOU WAGOUM THIERRY HENRI answered 2019-03-08T07:08:16Z