如何比较两个数组并检测值是否不正确或缺失?

时间:2015-10-28 12:22:31

标签: php arrays

我想要比较的数组: $original$duplicate

例如,这是我的原始文件:

  print_r($original);

  Array ( [0] => cat423 [1] => dog456 [2] => horse872 [3] => duck082 )

这是我的副本:

  print_r($dublicate);

  Array ( [0] => cat423 [1] => dug356 )

我将它们与array_diff进行比较:

$result = array_diff($original, $dublicate);

我的结果:

Array ( [1] => dog456 [2] => horse872 [3] => duck082 )

到目前为止一切顺利,但我需要对不正确的值和完全缺失的值进行区分。这可能吗?

2 个答案:

答案 0 :(得分:1)

一种方法是抓取整个original数组,之后您将拥有两个数组missingsduplicates

$original = array("cat423", "dog456", "horse872", "duck082");
$duplicate = array("cat423", "dug356");

$missings = $duplicates = array();
foreach ($original as $val) {
    if (in_array($val, $duplicate))
        $duplicates[] = $val;
    else
        $missings[] = $val;
}

如果你也需要这些键,你必须像这样改变foreach循环:

foreach ($original as $key=>$val) {
    if (in_array($val, $duplicate))
        $duplicates[] = array("key" => $key, "value" => $val);
    else
        $missings[] = array("key" => $key, "value" => $val);
}

答案 1 :(得分:1)

使用in_array功能

$original = array("cat423", "dog456", "horse872", "duck082");
$duplicate = array("cat423", "dug356");


foreach ($original as $item) {

    if(in_array($item, $duplicate))
    {
        $dup[] = $item;
    }        
    else
    {
        $miss[] = $item;
    }      
}
print_r($miss); #Array ( [0] => dog456 [1] => horse872 [2] => duck082 )
print_r($dup); #Array ( [0] => cat423 )

Working Preview