llgruff
@llgruff
Scala

Как найти пересечение массивов?

Сейчас используя array_merge() мы объединяем в 1 массив:
$result = [];
for($i = 0; $i < count($sql_query); $i++) {
  $query_result =  $wpdb->get_results($sql_query[$i]);
  $result = array_merge($result, $query_result);
}

Массивы $query_result имеют такой вид:
Array
(
    [0] => stdClass Object
        (
            [ID] => 481
        )
    [1] => stdClass Object
        (
            [ID] => 484
        )
    [2] => stdClass Object
        (
            [ID] => 485
        )
)

Второй пример:
Array
(
    [0] => stdClass Object
        (
            [ID] => 484
        )
)

Как записать пересечение? Чтобы в $result были ID которые есть в каждом из массивов $query_result?
  • Вопрос задан
  • 3256 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
$ids1 = array_column($result1, 'id');
$ids2 = array_column($result2, 'id');
// ...
$idsn = array_column($resultn, 'id');

$intersection = array_intersect($ids1, $ids2, ..., $idsn);


Или если упростить:

$ids = array_intersect(
    ...array_map(function(array $collection) {
         return array_column($collection, 'id');
    }, $results)
);


updated:

$result = null;
foreach($sql_queries as $sql_query) {
  $query_result =  $wpdb->get_results($sql_query);
  $ids = array_column($query_result, 'id');
  if (null === $result) { 
      $result = $ids; 
  } else {
      $result = array_intersect(
            $result, $ids
      );
  }
  $result = array_merge($result, $query_result);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@prishelec
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы