Kames P
Kames P

Reputation: 35

php compare multidimensional array equal

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

Answers (3)

Bibhudatta Sahoo
Bibhudatta Sahoo

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;
        }
    }
}

It will give o/p like this enter image description here

Upvotes: 0

Shringiraj Dewangan
Shringiraj Dewangan

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

Death-is-the-real-truth
Death-is-the-real-truth

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

Related Questions