На примере
$result = $dbh->query("SELECT id FROM test.news LIMIT 3")->fetchAll(PDO::FETCH_ASSOC);
// получили из БД список ID
// +-----+
// | id |
// +-----+
// | 100 |
// | 101 |
// | 102 |
// +-----+
$exist = [];
// делаем массив у которого ключ = ID, а значение = true
foreach ($result as $row) {
$exist[$row['id']] = true;
}
// массив новостей
$news = [
[ "id" => 102 , "titile" => "news title", "text" => "news text" ],
[ "id" => 1001, "titile" => "news title", "text" => "news text" ]
];
// проходим по каждому элементу массива с новостями
foreach ($news as $key => $item) {
// проверяем если ли в БД новость с таким ID
if (isset($exist[$item['id']]) && $exist[$item['id']] === true) {
// если такой новости нет - удаляем из массива с новостями
unset($news[$key]);
}
}
после фильтрации в новостях останется только новость с ID = 1001, ее и вставляем в БД.
Можно пойти другим путем, если ID новости является PK, или имеет уникальный ключ, то можно просто вставлять все новости игнорируя ошибки
INSERT INTO ..... ON DUPLICATE KEY UPDATE updated_at = NOW()
вставляем запись и если она уже была, обновим поле updated_at