PHP:检查两个多维数组之间的差异


PHP: Checking difference between two multidim arrays

以下是两个数组转储:

array(2) { 
    [0]=> array(7) { 
        ["id"]=> string(1) "1" 
        ["shoppinglist_id"]=> string(1) "1" 
        ["product_id"]=> string(1) "1" 
        ["amount"]=> string(1) "5" 
        ["date_added"]=> string(10) "1326912709"
        ["name"]=> string(7) "Tunfisk" 
        ["supplier_id"]=> string(1) "2" 
    } 
    [1]=> array(7) { 
        ["id"]=> string(1) "2" 
        ["shoppinglist_id"]=> string(1) "1" 
        ["product_id"]=> string(1) "2" 
        ["amount"]=> string(1) "5" 
        ["date_added"]=> string(10) "1326912713" 
        ["name"]=> string(3) "Lax" 
        ["supplier_id"]=> string(1) "6" 
    } 
}
array(2) { 
    [0]=> array(7) { 
        ["id"]=> string(1) "5" 
        ["shoppinglist_id"]=> string(1) "3" 
        ["product_id"]=> string(1) "1" 
        ["amount"]=> string(1) "5" 
        ["date_added"]=> string(10) "1326912810" 
        ["name"]=> string(7) "Tunfisk" 
        ["supplier_id"]=> string(1) "2" 
    } 
    [1]=> array(7) { 
        ["id"]=> string(1) "6" 
        ["shoppinglist_id"]=> string(1) "3" 
        ["product_id"]=> string(1) "2" 
        ["amount"]=> string(1) "5" 
        ["date_added"]=> string(10) "1326912810" 
        ["name"]=> string(3) "Lax" 
        ["supplier_id"]=> string(1) "6" 
    } 
}

我尝试了array_diff(),但这不支持多维数组。

然后我尝试了这个功能:

public function multidimensional_array_diff($a1,$a2)
{
  $r = array();
 foreach ($a2 as $key => $second)
 {
      foreach ($a1 as $key => $first)
      {
            if (isset($a2[$key]))
            {
                foreach ($first as $first_arraykey => $first_value)
                {
                    foreach ($second as $second_value)
                    {
                        if ($first_value == $second_value)
                        {
                            $true = true;
                            break;   
                        }
                    }
                    if (!isset($true))
                    {
                        if($first_arraykey != "date_added" && $first_arraykey != "shoppinglist_id")
                        {
                            $r[$key][$first_arraykey] = $first_value;
                        }
                    }
                    unset($true);
                }
            }
            else
            {
                $r[$key] = $first;
            }
      }
 }
  return $r;
}

这也不起作用,还给我不同,那没什么不同。

请注意,正如您所看到的,如果数组键是date_aded和shoppinglist_id,则它不会添加到差异数组中(因为,在我的系统中,它们不同是可以的)。

上面应该输出一个空的差异数组,因为这些数组之间没有差异(如果我们不看date_aded和shoppinglist_id)。

我怎样才能使它正常工作?

在对array_diff的注释中,给出了一些递归示例。这个似乎可以,你正在搜索的:

<?php 
function arrayRecursiveDiff($aArray1, $aArray2) { 
    $aReturn = array(); 
    foreach ($aArray1 as $mKey => $mValue) { 
        if (array_key_exists($mKey, $aArray2)) { 
            if (is_array($mValue)) { 
                $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]); 
                if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; } 
            } else { 
                if ($mValue != $aArray2[$mKey]) { 
                    $aReturn[$mKey] = $mValue; 
                } 
            } 
        } else { 
            $aReturn[$mKey] = $mValue; 
        } 
    } 
    return $aReturn; 
} 
?>

来源:http://www.php.net/manual/en/function.array-diff.php#91756