Laravel,如何在不同密钥的2个数组之间找到重复值?

时间:2017-08-13 09:54:17

标签: php laravel laravel-5.4

我有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);

6 个答案:

答案 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);