Chefranov
@Chefranov
Новичок

Как правильно использовать функции array_filter() и in_array()?

Имеется два массива:
$array1 = json_decode('[{"code": "7x1", "descr": "text1"},{"code": "7x2", "descr": "text"},{"code": "7x5", "descr": "text"}]');
$array2 = json_decode('[{"value":"7x1"},{"value":"7x2"}]');

И необходимо с помощью массива $array2 найти (отфильтровать) записи в $array1. Для этих целей вроде как должны подойти функции array_filter() и in_array()

Пытаюсь сделать так:
$result = array_filter($array1, fn($row) => in_array($row['code'], $array2));

но не выходит
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
0xD34F
@0xD34F
$values = array_column($array2, 'value');
$result = array_filter($array1, fn($n) => in_array($n->code, $values));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Не знаю, как на стрелочных функциях, но на классической анонимной функции внутрь ее контекста нужно передавать доп. аргументы через use (замыкание):
$array2_ = array_map(function($row){return $row['value'];}, $array2); // тут бы value вытащить в отдельный массив
$result = array_filter($array1, function($row) use ($array2_) {return in_array($row['code'], $array2_);});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы