Reputation: 49
Array one:
$arr1 = array(
array("uid" => "cgajate"),
array("uid" => "frankfurt9"),
array("uid" => "ricoetc")
);
Array two:
$arr2 = array(
array("uxid" => "cgajate"),
array("uxid" => "ricoetc"),
array("uxid" => "ricoetc1"),
array("uxid" => "frankfurt9"),
array("uxid" => "panterafan")
);
I have two multidimensional array (that as you can see above, do not share the same key name for the id, uxid vs uid). I am trying to find unmatched array on basis of comparing 'uid' and 'uxid' values and my expected result is:
Array
(
[0] => Array
(
[uxid] => ricoetc1
)
[1] => Array
(
[uxid] => panterafan
)
)
Below is my code,I am trying to find matched value and remove from result array but when I am printing give me empty array.
$tmpArray = array();
foreach($arr1 as $data1) {
$duplicate = false;
foreach($arr2 as $data2) {
if($data1['uid'] === $data2['uxid']) $duplicate = true;
}
if($duplicate === false) $tmpArray[] = $data1;
}
echo "<pre>", print_r($tmpArray);
Upvotes: 0
Views: 513
Reputation: 47992
Most elegantly, inverse the functional effect of this answer of mine.
Code: (Demo)
var_export(
array_udiff(
$arr2,
$arr1,
fn($a, $b) => ($a['uid'] ?? $a['uxid']) <=> ($b['uid'] ?? $b['uxid'])
)
);
Since the $a
and $b
variables may relate to either/any of the input arrays, you must try to access one of the array's keys, then fallback to the other array's keys.
Output:
array (
2 =>
array (
'uxid' => 'ricoetc1',
),
4 =>
array (
'uxid' => 'panterafan',
),
)
To re-index the output, just call array_values()
on array_udiff()
's output ... if truly needed.
Upvotes: 1
Reputation: 6311
try this
$arr1 = array(
array("uid" => "cgajate"),
array("uid" => "frankfurt9"),
array("uid" => "ricoetc")
);
$arr2 = array(
array("uxid" => "cgajate"),
array("uxid" => "ricoetc"),
array("uxid" => "ricoetc1"),
array("uxid" => "frankfurt9"),
array("uxid" => "panterafan")
);
foreach($arr2 as $k => $v){
if (!in_array($v['uxid'], array_column($arr1, 'uid'))){
$new[] =$v;
}
}
print_r($new);
Upvotes: 3