PHP:当元素乱序时显示两个数组的差异

时间:2015-06-05 14:35:27

标签: php arrays

我试图测试两个数组是否包含相同的元素并且顺序相同。例如:

$a = ['id', 'name', 'age', 'gender'];
$b = ['id', 'age', 'name', 'gender'];

如何只提取不匹配的部分:

Expected: name, age
Found: age, name

3 个答案:

答案 0 :(得分:1)

您可以使用array_diff_assoc()执行此操作,它可以解决两个数组之间的差异,并通过密钥检查来验证密钥是否相同:

$a = ['id', 'name', 'age', 'gender'];
$b = ['id', 'age', 'name', 'gender'];

$expected = array_diff_assoc($a, $b);
$actual = array_diff_assoc($b, $a);

echo 'Expected = ', implode(', ', $expected), PHP_EOL;
echo 'Actual = ', implode(', ', $actual), PHP_EOL;

Demo

答案 1 :(得分:0)

找出哪个元素不包含在另一个数组中使用array_diff()。

http://php.net/manual/en/function.array-diff.php

但这不会解决你的问题。您可以手动执行以下操作:

$temp = array();
if (count($array1) == count($array2) {
  for($i = 0; $i < count($array1); $i++){
    if ($array1[$i] != $array2[$i]) $temp[] = array("expected" => $array1[$i], "found" => $array2[$i];
  }
}
return $temp;

$temp将包含array("expected" => first value, "found" => second_value);

形式的差异

答案 2 :(得分:0)

这可能适合你

<?php

$a = ['id', 'name', 'age', 'gender'];
$b = ['id', 'age', 'name', 'gender'];

$error_a = array();
$error_b = array();


for ($i=0; $i < sizeof($a); $i++) { 
  if($a[$i]==$b[$i]){
    //no error
  }else{
    array_push($error_a, $a[$i]);
    array_push($error_b, $b[$i]);
  }
 }

var_dump($error_a);
var_dump($error_b);

?>