以下是两个数组转储:
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