Reputation: 35
Array 1
Array
(
[0] => Array
(
[prid] => 110
[size_id] => 24
)
[1] => Array
(
[prid] => 117
[size_id] => 24
)
[2] => Array
(
[prid] => 174
[size_id] => 24
)
)
Array 2
Array
(
[0] => Array
(
[prid] => 174
[size_id] => 24
)
[1] => Array
(
[prid] => 174
[size_id] => 25
)
[2] => Array
(
[prid] => 163
[size_id] => 24
)
)
I have 2 multidimensional arrays. I want to compare both arrays and resultant arrays are equal in both. (i.e) The answer is
[prid] => 174
[size_id] => 24
Note:- i am using array_intersect_assoc()
,but not working
How can we retrieve this???
Please tell the answer to this
Upvotes: 2
Views: 218
Reputation: 4904
You can get this done by using couple of array function and a foreach loop.
Try like this:-
$array1=[
['prid'=>110,'size_id'=>24],
['prid'=>117,'size_id'=>24],
['prid'=>174,'size_id'=>24],
];
$array2=[
['prid'=>174,'size_id'=>24],
['prid'=>174,'size_id'=>25],
['prid'=>163,'size_id'=>24]
];
$prid = array_intersect(array_column($array1,'prid'),array_column($array2,'prid'));
$size_id = array_intersect(array_column($array1,'size_id'),array_column($array2,'size_id'));
$array3 = array_merge($array1,$array2);
$result=[];
foreach ($array3 as $data){
if(in_array($data['prid'],$prid) && in_array($data['size_id'],$size_id)){
$result = $data;
break;
}
}
or like this
$result=[];
foreach ($array1 as $data1){
foreach ($array2 as $data2){
if($data1['prid']==$data2['prid'] && $data1['size_id']==$data2['size_id']){
$result = $data1;
break;
}
}
}
Upvotes: 0
Reputation: 784
$new_array = array();
foreach($array1 as $value1){
foreach($array2 as $value2){
if($value1['prid'] == $value2['prid'] && $value1['size_id'] == $value2['size_id']){
$new_array[] = $value1;
}
}
}
echo print_r($new_array);
Upvotes: 1
Reputation: 72269
You can use foreach()
and array_column()
to compare second array value with first array
$final_array = [];
foreach($array2 as $arr){
if(in_array($arr['prid'],array_column($array1,'prid')) && in_array($arr['size_id'],array_column($array1,'size_id'))){
$final_array[$arr['prid']] = $arr;
}
}
$final_array = array_values($final_array);
print_r($final_array);
Output:- https://eval.in/979112
Another easier solution using array_intersect()
and array_column()
$final_array = [];
$common_array = array_intersect (array_column($array1,'prid'),array_column($array2,'prid'));
foreach($common_array as $key=>$val){
$final_array[] = $array1[$key];
}
print_r($final_array);
Output:-https://eval.in/979135
Upvotes: 1