Harpreet Singh
Harpreet Singh

Reputation: 979

Find if two different keys have the same value in 2 arrays PHP

My arrays are:

Array1
(
    [0] => Array
        (
            [id] => 2
            [name] => Melamine
            [deleted] => 0
        )

    [1] => Array
        (
            [id] => 4
            [name] => Vinyl
            [deleted] => 0
        )

    [2] => Array
        (
            [id] => 5
            [name] => Polyu
            [deleted] => 0
        )
)

Array2
(
    [0] => Array
        (
            [productFinish] => 29
            [type] => 2
        )

    [1] => Array
        (
            [productFinish] => 29
            [type] => 4
        )

)

So, i would like to return first array if id of 1st array matches with type of another array. In this case, first 2 indexes of first array must come out in return.

Thanks

Upvotes: 0

Views: 52

Answers (2)

Nick
Nick

Reputation: 147166

You can use array_uintersect to get the results you want, supplying a callback function that compares the id value in array1 with the type value in array2:

$result = array_uintersect($array1, $array2, function ($a1, $a2) { 
    return ($a1['id'] ?? $a1['type']) - ($a2['type'] ?? $a2['id']);
});
print_r($result);

Note that because the callback is also called with values exclusively from $array1 or $array2 (for sorting), we have to allow for that in the comparison expression.

Output:

Array
(
    [0] => Array
        (
            [id] => 2
            [name] => Melamine
            [deleted] => 0
        )
    [1] => Array
        (
            [id] => 4
            [name] => Vinyl
            [deleted] => 0
        )
)

Demo on 3v4l.org

Upvotes: 1

Harpreet Singh
Harpreet Singh

Reputation: 979

Ok, i got it with for loop.

 $newTypeFilter = [];
    for($i=0; $i < count($arra1); $i++){
        for($j=0;$j<count($arra2); $j++){
            if($arra1[$i]['id'] == $arra2[$j]['type']){
               $newTypeFilter[] = $arra1[$i];
            }
        }
    }

Any other answers will be appreciated. Thanks

Upvotes: 0

Related Questions