这是两个数组转储:
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)。
我如何正常运作?
答案 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