我必须使用数组并想检查它们是否具有相同的值,而不是顺序,所以我使用了==
运算符:
$roles = ['admin', 'manager'];
$needle = ['manager', 'admin'];
$needle == $roles; // false
问题在于,使用相同的值但顺序不同,操作员会将比较评估为false
。
如何正确比较两个数组以检查值是否相同?
更新
目前,我正在使用array_intersect
:
$hasExactRoles = (
(array_intersect($roles, $needle) === $roles) &&
(array_intersect($needle, $roles) === $needle)
);
答案 0 :(得分:4)
<击> 您可以检查数组之间的区别。
$roles = ['admin', 'manager'];
$needle = ['manager', 'admin'];
if (empty(array_diff($roles, $needle))) {
echo 'The same.';
}
击> <击> 撞击>
正确答案是:
$roles = ['admin', 'manager'];
$needle = ['manager', 'admin'];
sort($roles);
sort($needle);
if ($roles === $needle) {
echo 'The same.';
}
答案 1 :(得分:2)
==
数组的计算结果为。在您的示例中,数字键0
和{{1与不同的值匹配,因此比较失败。
正如其他人所提到的,您可以使用1
来比较这些值,例如
array_diff
但请注意if (count(array_diff($needle, $roles)) > 0) {
// Arrays are not identical
}
仅在一个方向上工作 - 它会返回第二个中不的第一个参数中的值,因此您可能会还需要以相反的顺序运行它,具体取决于您的具体情况。
正如@axiac在评论中提到的,这仍然不能涵盖元素可以多次出现的情况。如果这适用,那么可能有更好的方法可以解决这个问题,例如:通过对数组进行排序或使用array_diff
等函数。
答案 2 :(得分:-2)
使用array_diff函数返回第二个数组中不在第一个数组中的任何值。如果array_diff为空,那么数组是相同的:
$roles = ['admin', 'manager'];
$needle = ['manager', 'admin'];
$result = array_diff($roles, $needle);
if (empty($result)) {
// Arrays are the same
}