Сравните все значения двух массивов в одном foreach - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть 2 массива в php

$array1=array('user_id'=>'1','user_id'=>'2','user_id'=>'3');
$array2=array('invite_user_id'=>'1','invite_user_id'=>'3');

Это результат запроса select, записанного в codeigniter. так что это ассоциативный массив. Это результат 2 запросов: один для списка пользователей, а второй для списка приглашенных пользователей. Я хочу проверить в списке пользователей, кто приглашен. Так что я хочу сравнить этот массив

foreach ($array1 as $key => $value) {
  if($array2[$key]->invite_user_id==$value->user_id) {
    echo "Matched"; 
  }
}

, но он сравнивает только 2 значения array1 с array2 3-е значение не сравнивается. Как он мог бы сравнить все значения array1 и array2 в вышеупомянутом foreach l oop

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Я нашел этот ответ

$array1=array('user_id'=>'1','user_id'=>'2','user_id'=>'3');
$array2=array('invite_user_id'=>'1','invite_user_id'=>'3');

$invitationset = [];
foreach ($array2 as $invite) {
  $invitationset[$invite->invite_user_id] = $invite->invite_user_id;
}

foreach ($array1 as $key => $value) {
  if(isset($invitationset[$value->user_id])){ 
    if($invitationset[$value->id]==$value->user_id){
      echo "Matched";
    }
  }
}
0 голосов
/ 13 февраля 2020

В ваших ассо c массивах у вас есть дублирующие ключи. Так что если вы используете:

print_r( $array1 );

Вы увидите, что ваш массив содержит только последнюю запись:

Array ( [user_id] => 3 )

Я думаю, что это не то, что вы ожидали. Таким образом, вы должны использовать разные ключи, такие как:

$array1 = array('user_id_1'=>'1','user_id_2'=>'2','user_id_3'=>'3');
$array2 = array('invite_user_id_1'=>'1','invite_user_id_2'=>'3');

Или вы даже не используете ассо c массивы, потому что это устарело в вашем примере, но не берите в голову:

$user_ids = array('1','2','3');
$invited_user_ids = array('1','3');

Вы можете сравнить ваши ассо c массивы вот так:

$array1 = array('user_id_1'=>'1','user_id_2'=>'2','user_id_3'=>'3');
$array2 = array('invite_user_id_1'=>'1','invite_user_id_2'=>'3');

foreach ($array1 as $user_id) {
  if( in_array( $user_id, $array2 ) ) {
    echo "Matched id: $user_id";
  }
}
...