2012-01-18 57 views
1

这里的两个数组转储:PHP:检查的两个multidim阵列之间的差异

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; 
} 

这也不管用,返回我的差异,即不同的arent。

注意你可以看到它不会添加到差异数组,如果数组键是date_added和shoppinglist_id(因为在我的系统中这些是不同的)。

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

我该如何正确使用这项工作?

+1

能否请您格式化您的阵列drumps – jprofitt 2012-01-18 20:39:33

+0

确定这里被格式化:http://pastebin.com/4HkFyBvy – Karem 2012-01-18 20:43:20

回答

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

+0

这个例子似乎工作,但顺序很重要。你知道订单无关紧要的例子吗? – nhenrique 2015-07-30 10:24:11