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

时间:2012-01-18 20:38:06

标签: php 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_added和shoppinglist_id(因为,在我的系统中,这些是不同的),它可以看到它不会添加到差异数组。

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

我如何正常运作?

1 个答案:

答案 0 :(得分:8)

在对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