Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multidimensional associative array intersection php

I have two 2-dimensional arrays and want to filter the first array's data using the second array so that the only elements retained are where the keys in the first and second levels match.

$array1 = [
    'a1' => ['a_name' => 'aaaaa', 'a_value' => 'aaa'],
    'b1' => ['b_name' => 'bbbbb', 'b_value' => 'bbb'],
    'c1' => ['c_name' => 'ccccc', 'c_value' => 'ccc'],
];

$array2 = [
    'b1' => ['b_name' => 'does not matter'],
];

In other words, I want the intersection of keys of $array1 and $array2. The result must be from $array1.

Desired result:

['b1' => ['b_name' => 'bbbbb']]
like image 810
kcssm Avatar asked Dec 26 '22 18:12

kcssm


1 Answers

function recursive_array_intersect_key(array $array1, array $array2) {
    $array1 = array_intersect_key($array1, $array2);
    foreach ($array1 as $key => &$value) {
        if (is_array($value) && is_array($array2[$key])) {
            $value = recursive_array_intersect_key($value, $array2[$key]);
        }
    }
    return $array1;
}

Demo here.

like image 105
deceze Avatar answered Jan 11 '23 21:01

deceze