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)); // вычислить пересечение массивов, сравнивая ключи