获取两个关联数组之间的差异

问题描述 投票:0回答:3

我对

array_diff()
的行为感到困惑。

为什么我的结果数组中不存在

genre
? 你知道如何解决这个问题吗?

<?php
$array1 = array
(
    'value01' => '0',
    'value02' => 'v2',
    'genre' => '1',
    'type' => 'text',
    'contry' => 'us',
    'data' => '1',
);
$array2 = array
(
    'value01' => 'v1',
    'value02' => 'v2',
    'genre' => '0',
    'type' => 'text',
    'contry' => 'canada',
    'data' => '1',
);

print_r(array_diff($array1,$array2));

我的结果:

Array
(
    [contry] => us
)

但我期望:

Array
(
    [value01] => 0,
    [genre] => 1,
    [contry] => us,
);
php arrays filter associative-array array-difference
3个回答
18
投票

5
投票

array_diff
对数组的 values 进行操作,并忽略键。

因为第一个数组中

genre
的值为
1
,这意味着如果第二个数组中的任何键
出现
1值,则genre
键将从第一个数组中删除.

看看没有键的数组,你就会明白我的意思。 您本质上有两个值列表:

['0','v2','1','text','us','1']

['v1','v2','0','text','canada','1']
。  第一个列表中唯一未出现在第二个列表中的值是 
'us'

我猜你可能想看看

array_key_diff()array_diff_assoc()


0
投票

array_diff_assoc

将导致数组到字符串转换异常,例如像这样的数组:

"ip" => "127.0.0.1" "uri" => "follows/count" "body" => array:1 [ "user_id" => 4473 ]
对于这些类型,我创建了一个通用的自定义函数,您可以使用它:

function mutidimensional_arrays_are_same(array $baseArray, array $compareArray) { try { foreach ($baseArray as $key => $value) { if (is_array($value) && isset($compareArray[$key]) && is_array($compareArray[$key])) { return mutidimensional_arrays_are_same($value, $compareArray[$key]); } else { if ($value != $compareArray[$key]) { return false; } } } return true; } catch (Exception $err) { return !str_starts_with($err->getMessage(), 'Undefined '); } }

array_diff_assoc

 不同,它会返回 
boolean

    

© www.soinside.com 2019 - 2024. All rights reserved.