Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取数组之间的差异_Php_Arrays_Associative Array - Fatal编程技术网

Php 获取数组之间的差异

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

我在这里问了一个类似的问题,或者在这里,但这是一个改进和修改了很多的问题,让它变得容易,正如许多古鲁建议我的。请不要否定。如果我犯了什么错误,请告诉我,我会尽力改正的,好吗

问题是。。。 我使用的是PHP5.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\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           
    )
)