Вы добавляете каждую запись в свой массив $recordsToDelete
, потому что каждый раз, когда значения brandId
не совпадают, вы добавляете запись и, поскольку значения brandId
не совпадают для all записей, это означает, что условие всегда выполняется хотя бы один раз для каждой записи. Вместо этого сравните все значения brandId
из внешнего интерфейса для каждой внутренней записи и только добавьте запись в $recordsToDelete
, если она не соответствует любому другому brandId
стоимость. Например:
$recordsToDelete = array();
foreach ($fromBackend as $backendItem) {
foreach ($fromFrontEnd as $frontendItem) {
if ($frontendItem->brandId == $backendItem['BrandID']) break;
}
if ($frontendItem->brandId != $backendItem['BrandID']) $recordsToDelete[] = $backendItem['record'];
}
print_r($recordsToDelete);
Вывод (для ваших демонстрационных данных):
Array
(
[0] => 114466
)
Демо на 3v4l.org
Если $fromFrontEnd
может быть пустым, приведенный выше код вызовет ошибку неопределенной переменной. Вы можете обойти это, проверив его с помощью оператора объединения NULL, например
if (($frontendItem->brandId ?? -1) != $backendItem['BrandID']) $recordsToDelete[] = $backendItem['record'];
или используя явный флаг found
:
foreach ($fromBackend as $backendItem) {
$found = false;
foreach ($fromFrontEnd as $frontendItem) {
if ($frontendItem->brandId == $backendItem['BrandID']) {
$found = true;
break;
}
}
if (!$found) $recordsToDelete[] = $backendItem['record'];
}
, хотя, вероятно, было бы проще просто не выполнять внешний foreach
l oop, если только !empty($fromFrontEnd)
;
Демонстрация двух вышеуказанных решений на 3v4l.org