【问题标题】:PHP - udiff compare multiple valuesPHP - udiff 比较多个值
【发布时间】:2015-09-01 08:55:51
【问题描述】:

我有两个多维数组,我需要比较它们。问题是每个子数组通过permission_idcreateview 的组合是唯一的。我需要比较这个数组来检查是否有这样一个唯一的子数组。子数组的键可以不同。到目前为止,我有这个:

$updated_permissions = array(
    0 => array(
        'create' => 0,
        'view' => 1,
        'permission_id' => "87"
    ),
    1 => array(
        'create' => 0,
        'view' => 1,
        'permission_id' => "11"
    ),
    2 => array(
        'create' => 1,
        'view' => 0,
        'permission_id' => "11"
    ),
    3 => array(
        'create' => 0,
        'view' => 1,
        'permission_id' => "18"
    )
);

$origin_permissions = array(
    0 => array(
        'create' => 0,
        'view' => 1,
        'permission_id' => "8"
    ),
    1 => array(
        'create' => 0,
        'view' => 1,
        'permission_id' => "11"
    ),
    2 => array(
        'create' => 1,
        'view' => 0,
        'permission_id' => "12"
    )
);

$arrdiff = array_merge(
    array_udiff($origin_permissions, $updated_permissions, 'udiffCompare'),
    array_udiff($updated_permissions, $origin_permissions, 'udiffCompare')
);

function udiffCompare($a, $b) {
    return $a['permission_id'] - $b['permission_id'];
}

print_r($arrdiff);

但只比较 permission_id 所以结果是这样的:

[0] => Array (
    [create] => 0
    [view] => 1
    [permission_id] => 8
    )
[1] => Array (
    [create] => 1
    [view] => 0
    [permission_id] => 12
    )
[2] => Array (
    [create] => 0
    [view] => 1
    [permission_id] => 87
    )
[3] => Array (
    [create] => 0
    [view] => 1
    [permission_id] => 18
    )

虽然我还需要比较 createview 是否相同。所以我想要的结果是这个(permission_id 11 有不同的createview):

[0] => Array (
    [create] => 0
    [view] => 1
    [permission_id] => 8
    )
[1] => Array (
    [create] => 1
    [view] => 0
    [permission_id] => 12
    )
[2] => Array (
    [create] => 0
    [view] => 1
    [permission_id] => 87
    )
[3] => Array (
    [create] => 0
    [view] => 1
    [permission_id] => 18
    )
[4] => Array (
    [create] => 1
    [view] => 0
    [permission_id] => 11
    )

这个代码也是here

【问题讨论】:

    标签: php arrays multidimensional-array diff array-difference


    【解决方案1】:

    像这样?

    function udiffCompare($a, $b) {
     if ($a['permission_id'] !== $b['permission_id'] || $a['view'] !== $b['view'] || $a['create'] !== $b['create']){
      return 1;
      }
    }
    

    【讨论】:

    • 你也可以全部添加并返回
    • 有了这个,我得到了与我想要的完全不同的结果。
    • 好的,那我理解对了吗,你想拥有所有改变了什么的条目?不管发生了什么变化?
    • 我不知道如何更好地解释。每个子数组通过permission_id、create 和view 的组合是唯一的,所以是的,如果有什么不同,则意味着这是另一个唯一的子数组。
    • 好的,我知道你需要什么,但你能试试上面更新的代码,告诉我结果有什么问题吗?
    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多