Задать вопрос
@WebmasterW3S
Веб-программист

Как найти все значения одного массива в другом многомерном массиве?

Доброго времени суток! Вообще задача сначала стояла так, но перемучившись решил сложить это бремя на PHP. Итак... имею на выходе массив товаров, допустим
$result = array(
  array(
    'id' => 1,
    'category_id' => 1
  ),
  array(
    'id' => 2,
    'category_id' => 2
  ),
  array(
    'id' => 3,
    'category_id' => 1
  ),
  array(
    'id' => 1,
    'category_id' => 2
  ),
)

Мне нужно выбрать айдишники товаров, которые одновременно находятся и в первой и во второй категории. То есть у меня есть ещё один массив со списком категорий, в которых должен находиться товар. Для данного примера мне нужно получить на выходе следующий массив
$out = array(1)// В моём массиве остался лишь айдишник 1, поскольку только у него есть category_id = 1 и category_id =2

В общем, как из вышеуказанного массива получить массив с айдишниками товара, который находится в категориях, указанных в другом массиве? Заранее огромное спасибо!
  • Вопрос задан
  • 477 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F
Обходите массив товаров и запоминаете к каким категориям принадлежит каждый встреченный товар. Одновременно проверяете, принадлежит ли текущий товар к требуемым категориям. Если да, сохраняете его id в выходной массив. Типа так:

$categories = [1, 2]; // массив с категориями, к которым должны принадлежать товары

$goodsCategories = [];
$out = [];
foreach ($result as $n) {
  $id = $n['id'];
  $goodsCategories[$id][] = $n['category_id'];
  if ($categories === $goodsCategories[$id] && !in_array($id, $out)) {
    $out[] = $id;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@EvgenZZ
php, javascript developer
посмотрите
https://github.com/wmde/Diff
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽