Использование array_filter для фильтрации многомерного массива

У меня есть два массива, второй многомерный. Я пытаюсь вернуть третий массив, где host_id в Array2 соответствуют значениям в Array1.

Array1
(
[0] => 146
[1] => 173
)

Array2
(
'localhost' => (
'0' => (
'host_id' => 146
),
),
'192.168.0.43' => (
'1' => (
'host_id' => 160
),
),
'192.168.0.38' => (
'2' => (
'host_id' => 173
)
)
)

Итак, Array3 должен быть:

    Array3
(
[localhost] => Array
'0' => (
'host_id' => 146
),

[192.168.0.38] => Array
'0' => (
'host_id' => 173
),

)

Я пробовал это, но он только возвращает последний соответствующий host_id.

foreach ($Array1 as $value) {

$filtered_hosts = array_filter($Array2, function ($host) use ($value) {

return in_array($host['host_id'], $host_id);
});
}

Что мне не хватает?

0

Решение

Вы могли бы просто использовать array_filter без foreach,

Передайте первый массив use($array1) и использовать in_array проверить, существует ли значение для host_id.

$array1 = [
146,
173
];

$array2 = [
'localhost' => [
'host_id' => 146
],
'192.168.0.43' => [
'host_id' => 160
],
'192.168.0.38' => [
'host_id' => 173
]
];

$filtered_hosts = array_filter($array2, function($x) use ($array1) {
return in_array($x['host_id'], $array1);
});


print_r($filtered_hosts);

демонстрация

Обновить

Для обновленной структуры данных вы можете получить первый элемент из массива, например, с сброс:

$filtered_hosts = array_filter($array2, function ($x) use ($array1) {
return in_array(reset($x)['host_id'], $array1);
});

демонстрация

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector