PHP Вернуть массив ключ которых содержит строку

есть массив

Array
(
[1] => Array
(
[id] => 1
[name] => name1
[url] => 106
[category_id] => 7
[relevancy] => 8
)
[2] => Array
(
[id] => 2
[name] => name2
[url] => 10
[category_id] => 7
[relevancy] => 8
)
[3] => Array
(
[id] => 3
[name] => name3
[url] => 10
[category_id] => 10
[relevancy] => 8
))

есть у меня строка $str = '1,3'; Как мне вернуть такой же массив как ранее, но только те который есть в строке $str т.е. должно получится

Array
(
[1] => Array
(
[id] => 1
[name] => name1
[url] => 106
[category_id] => 7
[relevancy] => 8
)

[3] => Array
(
[id] => 3
[name] => name3
[url] => 10
[category_id] => 10
[relevancy] => 8
))

Ответы (1 шт):

Автор решения: Максим Степанов

Разбить строку по запятой и затем сравнить массивы:

$arr = [
    1 => [
        'id' => 1,
        'name' => 'name1',
        'url' => 106,
        'category_id' => 7,
        'relevancy' => 8,
    ],
    2 => [
        'id' => 2,
        'name' => 'name2',
        'url' => 10,
        'category_id' => 7,
        'relevancy' => 8,
    ],
    3 => [
        'id' => 3,
        'name' => 'name3',
        'url' => 10,
        'category_id' => 10,
        'relevancy' => 8,
    ]
];

$str = '1,3';
$keys = explode(',', $str);     // разбить строку на массив 
$res = array_intersect_key($arr, array_flip($keys));    // вычислить пересечение массивов, сравнивая ключи
→ Ссылка