我在这里问了一些类似的问题,https://stackoverflow.com/questions/18343559/compare-two-associative-arrays?noredirect=1#comment26938095_18343559或者compare two associative array and display the difference但是这是一个很好的改进和修改的问题,以便让它变得容易,正如许多Guru建议的那样。请不要否定。如果我有任何错误,请告诉我,我会尽力解决,请?
这是问题...... 我使用的是php 5.3,这个数组是在从生成的PDO MySQL查询中传递了很多进程之后发生的,并使用了以下函数
function diff($new,$old)
{
$del=array_diff_assoc($old,$new);
$add=array_diff_assoc($new,$old);
return $diff=array("old"=>$del, "news"=>$add);
}
该数组如下所示......
$aa= Array
(
[old] => Array
(
[cod] =>
[gender] => m
[title] =>
)
[news] => Array
(
[cod] =>
[gender] => f
[title] => Mr
[wl] => 255
[heigh] =>
)
)
我尝试过以下代码
$ combine = array_merge_recursive($ aa ['old'],$ aa ['news']);
生成以下数组..(这正是我想要的结果)
Array
(
[gender] => Array
(
[gender] => m
[gender] => f
)
[title] => Array
(
[title] =>
[title] => Mr
)
[gender] => Array
(
[gender] => m
[gender] => f
)
[wl] => Array
(
[wl] =>
[wl] => 255
)
)
但似乎我有一些不需要的数据......
它应该做的是,如果[old]数组中存在任何键并且具有相同键的[news]数组中的值,则显示它,如果[news]数组中的任何键退出,则显示值但是如果[news]数组中有任何键,[old]数组中没有相应的键,没有值,不显示它。
任何想法,我都会感激......我只是堆了一些......
答案 0 :(得分:1)
你在那里犯了一个逻辑错误。在具有键值对的数组中,同一个键不能有两个不同的值:
[gender] => Array
(
[gender] => m
[gender] => f
)
在上面得到的数组中,gender
重复两次。 $array['gender']['gender']
会返回什么?
假设您想要一个数组:
[gender] => Array
(
m,
f
)
您可以迭代两个数组并添加相应的值。这是一个假设空值为null
的示例:
$final = array(); // final array
$old;
$new;
foreach ($old as $k => $v) {
$final[$k] = array($v, null);
}
foreach ($new as $k => $v) {
if (array_key_exists($k, $final) {
$final[$k][1] = $v;
} else {
$final[$k] = array(null, $v);
}
}
上面的代码将打印出以下内容:
Array
(
[gender] => Array
(
m, f
)
[title] => Array
(
null, Mr
)
[gender] => Array
(
m, f
)
[wl] => Array
(
null, 255
)
)
这是与结果数组最接近的东西。