Из 1 массива найти значения, которых нет во 2 массиве

Есть 2 массива. 1 массив: значение id из таблицы MySQL, 2 массив: значение из массива XML. Нужно узнать какой элемент есть в 1 таблице, но нет во втором.

1 массив выводится так:

while($row = mysqli_fetch_array($sql)) {
$model = $row['model'];
}

2 массив выводится так:

$data = simplexml_load_file('https://site.ru/primer.xml');
foreach ($data->shop->offers->offer as $row) {
$id = intval($row['id']);
}

В итоге начеркал такой бред, который не работает соответственно:

while($row = mysqli_fetch_array($sql)) {
    
$model = $row['model'];


foreach ($data->shop->offers->offer as $row) {
$id = intval($row['id']);

if ($model == $id){
echo $id.' - существует<br />'; 
}
else
{
echo $id.' - не существует<br />';  
}
    
}


}

Что-то туплю, не пойму как это грамотно сделать. Помогите, пожалуйста.


Ответы (1 шт):

Автор решения: Вадим Александру

Суть решения в том, чтобы сначала собрать список id из xml, потом делать выборку из базы тех элементов, которые не входят в этот список.

Пример кода:

 //Формируем первый массив
    $data = simplexml_load_file('https://site.ru/primer.xml');
    $list = [];
    foreach ($data->shop->offers->offer as $row) {
        $list[] = intval($row['id']);
    }
    
    //формируем sql запрос
    $query = mysqli_query($link, "SELECT model FROM oc_product WHERE model not in (". implode(',', $list) .")");
    
    //Выводим результат
    while($row = mysqli_fetch_array($query)) {
        $model = $row['model'];
        echo $model . '<br>';
    }

В случае, если хотите использовать свой вариант

//Формируем первый массив
$data = simplexml_load_file('https://site.ru/primer.xml');
$list = [];
foreach ($data->shop->offers->offer as $row) {
    $list[] = intval($row['id']);
}


while($row = mysqli_fetch_array($sql)) {
    $model = $row['model'];
    if (in_array($model, $list)){
        echo $id.' - существует<br />';
    } else {
        echo $id.' - не существует<br />';
   }
        
}
→ Ссылка