0

我在这里问了一个类似的问题,https://stackoverflow.com/questions/18343559/compare-two-associative-arrays?noredirect= 1#comment26938095_18343559或在这里比较两个关联数组并显示差异但这已经有了很大的改进和正如许多大师建议我的那样,修改了问题以使其变得容易。请不要否定。如果我犯了任何错误,请告诉我,我会尽力解决这个问题,好吗?

这是问题......我使用的是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] 数组中没有对应的键并且没有值不要显示它。

任何想法,我会很感激......我只是堆叠一些如何......

4

1 回答 1

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

这是最接近结果数组的东西。

于 2013-08-21T10:48:45.023 回答