[B]Внимание! Удалять и обновлять несколько значений файлового свойства можно только ОДНИМ вызовом, а не несколькими, так как меняются ID значений свойств.[/B]
Подразумевается, что необходимо собрать для 1 свойства типа файл все удаляемые значения (PROPERTY_VALUE_ID каждого файла) в массив. Затем производить удаление.
Например:[CODE]<?php
$obElement = \CIBlockElement::GetList(
[],
[
'ID' => (int)$aElementID,
'IBLOCK_ID' => (int)$iMainIblockId
],
false,
false,
[
'ID',
'IBLOCK_ID',
]);
if ($obFields = $obElement->GetNextElement()) {
$arProperties = $obFields->GetProperties();
if (!empty($arProperties)) {
/**
* Собираем файлы для удаления в массив,
* группируя по свойствам
*/
foreach ($arProperties as $sPropCode => $arPropValues) {
/**
* $sPropCode - ключ код свойства, в котором мы ищем удаляемый файл без PROPERTY_ и _VALUE, например PHOTO
* $arPropValues - PROPERTY_VALUE_ID удаляемого файла
* $arFiles["FILE_DELETE"] - массив, содержащий ID удаляемых файлов всех свойств
* $sValue - искомое значение ID
*/
foreach ($arPropValues['VALUE'] as $iKeyValue => $sValue) {
if (in_array($sValue, $arFiles["FILE_DELETE"]) && $arPropValues['PROPERTY_VALUE_ID'][$iKeyValue] > 0) {
$arDeleteList[$sPropCode][$arPropValues['PROPERTY_VALUE_ID'][$iKeyValue]] = [
'VALUE' => [
'del' => 'Y',
]
];
}
}
}
/**
* Если массив для удаления файлов не пустой
* производим удаление
* */
if (!empty($arDeleteList)) {
foreach ($arDeleteList as $sPropForDelete => $arDeleteFiles) {
CIBlockElement::SetPropertyValueCode(
$aElementID,
$sPropForDelete,
$arDeleteFiles
);
}
}
}
}[/CODE]