Из 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 />';
}
}