我想检查两个数组是否相等.我的意思是:相同的大小,相同的索引,相同的值.我怎样才能做到这一点?
使用!==用户的建议,我希望如果数组中的至少一个元素不同,则以下将打印输入,但事实上它不是.
if (($_POST['atlOriginal'] !== $oldAtlPosition)
or ($_POST['atl'] !== $aext)
or ($_POST['sidesOriginal'] !== $oldSidePosition)
or ($_POST['sidesOriginal'] !== $sideext)) {
echo "enter";
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*rig 471
$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.
Run Code Online (Sandbox Code Playgroud)
请参见数组运算符.
编辑
不等式运算符!=是非标识运算符!==用于匹配等于运算符==和标识运算符===.
lep*_*epe 81
根据这个页面.
注意:接受的答案适用于关联数组,但它不能像索引数组那样工作(如下所述).如果要比较它们中的任何一个,请使用此解决方案.此外,此函数可能无法用于多维数组(由于array_diff函数的性质).
测试两个索引数组,哪些元素的顺序不同,使用$a == $b或$a === $b失败,例如:
<?php
(array("x","y") == array("y","x")) === false;
?>
Run Code Online (Sandbox Code Playgroud)
那是因为上述意思是:
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)
);
}
?>
Run Code Online (Sandbox Code Playgroud)
添加了比较数组大小(由super_ton建议),因为它可以提高速度.
小智 32
尝试序列化.这也将检查嵌套的子数组.
$foo =serialize($array_foo);
$bar =serialize($array_bar);
if ($foo == $bar) echo "Foo and bar are equal";
Run Code Online (Sandbox Code Playgroud)
将它们与其他值进行比较:
if($array_a == $array_b) {
//they are the same
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关所有数组运算符的信息:http:
//php.net/manual/en/language.operators.array.php
例如,===还要检查数组中元素的类型和顺序是否相同.
工作简短的解决方案,即使对于以不同顺序给出键的数组也是如此:
public static function arrays_are_equal($array1, $array2)
{
array_multisort($array1);
array_multisort($array2);
return ( serialize($array1) === serialize($array2) );
}
Run Code Online (Sandbox Code Playgroud)
if (array_diff($a,$b) == array_diff($b,$a)) {
// Equals
}
if (array_diff($a,$b) != array_diff($b,$a)) {
// Not Equals
}
Run Code Online (Sandbox Code Playgroud)
从我的观点来看,使用 array_diff 比使用 array_intersect 更好,因为通过这种性质的检查,返回的差异通常小于相似性,这样 bool 转换对内存的占用就更少。
编辑请注意,此解决方案适用于普通数组,并补充上面发布的仅对字典有效的 == 和 === 。
function compareIsEqualArray(array $array1,array $array):bool
{
return (array_diff($array1,$array2)==[] && array_diff($array2,$array1)==[]);
}
Run Code Online (Sandbox Code Playgroud)
无论值顺序如何检查相等性的另一种方法是使用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';
}
Run Code Online (Sandbox Code Playgroud)
这是一个也可以使用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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
254984 次 |
| 最近记录: |