Php 获取数组之间的差异
我在这里问了一个类似的问题,或者在这里,但这是一个改进和修改了很多的问题,让它变得容易,正如许多古鲁建议我的。请不要否定。如果我犯了什么错误,请告诉我,我会尽力改正的,好吗 问题是。。。 我使用的是PHP5.3,这个数组是在通过生成的PDO MySQL查询的许多过程并使用以下函数之后产生的Php 获取数组之间的差异,php,arrays,associative-array,Php,Arrays,Associative Array,我在这里问了一个类似的问题,或者在这里,但这是一个改进和修改了很多的问题,让它变得容易,正如许多古鲁建议我的。请不要否定。如果我犯了什么错误,请告诉我,我会尽力改正的,好吗 问题是。。。 我使用的是PHP5.3,这个数组是在通过生成的PDO MySQL查询的许多过程并使用以下函数之后产生的 function diff($new,$old) { $del=array_diff_assoc($old,$new); $add=array_diff_assoc($new,$old);
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\u merge\u recursive($aa['old'],$aa['news'])
生成以下数组..(这正是我想要的结果)
但似乎我有一些不需要的数据包括在内
它应该做的是,如果[old]数组中存在任何键,并且在[news]数组中具有相同键的值,则显示该键;如果[news]数组中存在任何键且具有相同值,则显示该键;如果[news]数组中存在任何键且在[old]数组中没有对应键且没有值,则不显示该键
如果你有任何想法,我将不胜感激……我只是想告诉你……你在那里犯了一个逻辑错误。在具有键值对的数组中,同一个键不能有两个不同的值:
[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
)
)
哪个是最接近结果数组的内容。如果键存在于old中,并且在new中有值,您希望它显示旧值还是新值,或者两者都显示?我想同时显示这两个值,以便我可以使用它进行比较…old是blablabla,new是blaba…我已经像这样传递了数组,$final=array();//最终数组$old=$result['old']$new=$result['new'];我说的对吗?@Jeffrey先生谢谢你的帮助,给我展示了不同的思考方向,你的方向对我很有用,我接受你的回答。再次感谢。
Array
(
[gender] => Array
(
m, f
)
[title] => Array
(
null, Mr
)
[gender] => Array
(
m, f
)
[wl] => Array
(
null, 255
)
)