Задать вопрос
@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

В общем, как из вышеуказанного массива получить массив с айдишниками товара, который находится в категориях, указанных в другом массиве? Заранее огромное спасибо!
  • Вопрос задан
  • 466 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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