I have two multidimenzional arrays and I need to compare them. Problem is that each subarray is unique by combination of permission_id
, create
and view
. And I need to compare this arrays to check if there is such a unique subarray. The keys of subarrays can be different. So far I have this:
$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);
but that compare only permission_id
so result is this:
[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
)
while I need to compare also if create
and view
are same. So result I want to have is this (with permission_id
11 which has different create
and view
):
[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
)
This code is also here
Like this ?
function udiffCompare($a, $b) {
if ($a['permission_id'] !== $b['permission_id'] || $a['view'] !== $b['view'] || $a['create'] !== $b['create']){
return 1;
}
}