我有3个数组,如何返回' true'如果2数组具有完全相同的值?在这种情况下,$ array1和$ array2为true,同时$ array1和$ array3为' false'因为其中一个值不相同。有没有雄辩的方法来做到这一点?
$array1 = array('dog'=>1, 'cat'=>2, 'monkey'=>3);
$array2 = array('red'=>1, 'green'=>2, 'blue'=>3);
$array3 = array('desk'=>1, 'chair'=>2, 'carpet'=>2);
答案 0 :(得分:3)
function compare($arrayX, $arrayY) {
return array_values($arrayX) == array_values($arrayY)
}
compare($array1, $array2) // TRUE
compare($array1, $array3) // FALSE
array_values将返回数组中数组的所有值。
答案 1 :(得分:1)
您应该看到Array operators:
$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.
不等式运算符为!=
,而非标识运算符为!==
,以匹配等于运算符==和标识运算符===
。
作为替代方案,您可以使用implode()
并检查字符串是否相等,方法2:
if(implode('', $array1) === implode('', $array2)) {
echo "Equal";
}
编辑OP 最后的答案
foreach($array1 as $key => $value)
{
foreach($array2 as $key1 => $value1)
{
if(implode('', $array1[$key]) === implode('', $array2[$key1]))
{
echo "EQUAL";
}
}
}
答案 2 :(得分:1)
@mimo的解决方案是使用普通数组执行此操作的好方法。但是,您明确要求提供Laravel解决方案,所以请转到:
function areSame($a1, $a2) {
return collect($a1)->diff(collect($a2))->count() === 0;
}
这只是创建输入数组的集合,因此我们可以在它们上使用Laravel的集合方法。然后找出输入集合之间的差异 - 如果存在差异,这将导致X项目的集合。如果没有差异,则生成的diff集合将为空。
areSame($array1, $array2) // TRUE
areSame($array1, $array3) // FALSE
答案 3 :(得分:0)
您可以尝试使用array_values
从数组中提取值,然后将它们比较为
$array1 = array('dog'=>1, 'cat'=>2, 'monkey'=>3);
$array1v = array_values($array1);
$array2 = array('red'=>1, 'green'=>2, 'blue'=>3);
$array2v = array_values($array2);
$array3 = array('desk'=>1, 'chair'=>2, 'carpet'=>2);
$array3v = array_values($array3);
然后
$array1v == $array2v; //true
$array1v == $array3v; //false
答案 4 :(得分:0)
您可以使用array_diff
功能。像这样:
$array1 = array('dog'=>1, 'cat'=>2, 'monkey'=>3);
$array2 = array('red'=>1, 'green'=>2, 'blue'=>3);
$array3 = array('desk'=>1, 'chair'=>2, 'carpet'=>2);
if (count(array_diff($array1, $array2)) > 0) {
echo 'false';
} else {
echo 'true';
}
在此示例中,$array1
和$array2
为真; $array1
和$array3
是假的。
答案 5 :(得分:0)
结帐:
function compare($arr1 , $arr2)
{
return array_values($arr1) == array_values($arr2);
}
$anyTowArraysAreEquals = compare($array1 , $array2) || compare($array1 , $array3) || compare($array2 , $array3);