php两个数组相比,PHP - 检查两个数组是否相等

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值