PHP – 检查两个数组是否相等

我想检查两个数组是否相等。 我的意思是:相同的大小,相同的索引,相同的值。 我怎样才能做到这一点?

使用===如用户所build议的,我期望如果数组中至less有一个元素是不同的,但是实际上它不会。

 if (($_POST['atlOriginal'] !=== $oldAtlPosition) or ($_POST['atl'] !=== $aext) or ($_POST['sidesOriginal'] !=== $oldSidePosition) or ($_POST['sidesOriginal'] !=== $sideext)) { echo "enter"; } 
 $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. 

请参阅数组运算符 。

编辑

不等式运算符是!= ,而非同一运算符是!==以匹配等号运算符==和身份运算符===

根据这个页面 。

注意:接受的答案适用于关联数组,但是它不能按照预期的方式使用索引数组(如下所述)。 如果你想比较他们中的任何一个,那么使用这个解决scheme。 此外,这个函数可能不适用于multidimensional array(由于array_diff函数的性质)。

使用$a == $b$a === $btesting两个索引数组,哪些元素的顺序不同,例如:

 <?php (array("x","y") == array("y","x")) === false; ?> 

那是因为上面的意思是:

array(0 => "x", 1 => "y")array(0 => "y", 1 => "x")

要解决这个问题,请使用:

 <?php 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_tonbuild议),因为它可以提高速度。

尝试序列化。 这也将检查嵌套的子arrays。

 $foo =serialize($array_foo); $bar =serialize($array_bar); if ($foo == $bar) echo "Foo and bar are equal"; 

将其作为其他值进行比较:

 if($array_a == $array_b) { //they are the same } 

你可以在这里阅读关于所有数组运算符: http : //php.net/manual/en/language.operators.array.php注意例如===还检查数组中元素的types和顺序是相同。

!===不会工作,因为这是一个语法错误。 正确的方法是!== (不是三个“等于”符号)

您可以使用array_diff_assoc来检查两者之间的差异。

一种方法:(实施http://tools.ietf.org/html/rfc6902#section-4.6的; “相当于”

这种方式允许关联数组的成员sorting不同 – 例如,他们会被认为是平等的每种语言,但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 (eg "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)); } 

另一种检查等值而不考虑价值顺序的方法是使用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'; } 

这是一个版本,也适用于multidimensional array使用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; } 

array_diff – 计算数组的差异

http://php.net/manual/en/function.array-diff.php

 array array_diff ( array $array1 , array $array2 [, array $... ] ) 

array1与一个或多个其他数组进行比较,并返回array1中不存在于其他数组中的值。

即使在数组中按照不同的顺序给出的键也可以使用简短的解决scheme:

 public static function arrays_are_equal($array1, $array2) { array_multisort($array1); array_multisort($array2); return ( serialize($array1) === serialize($array2) ); } 

使用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;