Как вывести значение множественных свойств в битриксе

У меня есть список ID товаров

$strValue = '123, 125, 158, 967, 667';

Мне нужно пройтись по каждому товару и получить значения двух свойств Свойств с ID=1137 и ID=1138

И получить в результате такую конструкцию:

  <interLinkingParam name="[Название свойства]">
        <interLinkingParamValue value="[значение свойства ID1137]" color="[значение свойства ID1138]" imageUrl="https://site.ru/[значение свойства ID1138].jpg" groupId="64599" />
        <interLinkingParamValue value="[значение свойства ID1137]" color="[значение свойства ID1138]" imageUrl="https://site.ru/[значение свойства ID1138].jpg" groupId="[ID товара из которого вытянули значение]" />
 </interLinkingParam>

Меня хватило на то чтоб написать такой код:

$arElementIds = explode(',', $strValue); // Разбиваем строку на массив ID элементов
$propertyId1 = 1137; // ID первого свойства
$propertyId2 = 1138; // ID второго свойства

$resultString = ''; // Строка для хранения результата

foreach ($arElementIds as $elementId) {
    $arFilter = ['ID' => $elementId];
    $arSelect = ['ID', 'PROPERTY_'.$propertyId1, 'PROPERTY_'.$propertyId2];
    $rsElement = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);
    if ($arElement = $rsElement->GetNext()) {
        $propertyValue1 = $arElement['PROPERTY_'.$propertyId1.'_VALUE'];
        $propertyValue2 = $arElement['PROPERTY_'.$propertyId2.'_VALUE'];
        $imageUrl = "https://site.ru/{$propertyValue2}.jpg";
        $resultString .= "<interLinkingParamValue value='{$propertyValue1}' color='{$propertyValue1}' imageUrl='{$imageUrl}' groupId='{$elementId}'/>\n";
    }
}

// Выводим результат
echo $resultString;

и получаю такой результат:

<interLinkingParamValue value='White | Белый 6000 K' color='White | Белый 6000 K' imageUrl='https://site.ru/#f2fafb.jpg' groupId='210580'/>
<interLinkingParamValue value='White | Белый 6000 K' color='White | Белый 6000 K' imageUrl='https://site.ru/#f2fafb.jpg' groupId='210373'/>
<interLinkingParamValue value='White | Белый 6000 K' color='White | Белый 6000 K' imageUrl='https://site.ru/#f2fafb.jpg' groupId='202392'/>
<interLinkingParamValue value='White | Белый 6000 K' color='White | Белый 6000 K' imageUrl='https://site.ru/#f2fafb.jpg' groupId='201818'/>

И вроде бы все хорошо, для товаров у которых одно значение записано в поле свойства. Но никак не могу понять как вывести все значения когда и больше?

В примере выше, это вывод значений из товаров в которых оно множественное, тип строка. в админке выглядит так:

введите сюда описание изображения

А в моем коде выводит только первое значение.

Помогите понять что не так делаю и как вывести все значения свойств в одну строку. Чтоб было так:

<interLinkingParamValue value='White | Белый 6000 K,Warm | Тёплый 2700 K' color='White | Белый 6000 K,Warm | Тёплый 2700 K' imageUrl='https://site.ru/#f2fafb#f8c077.jpg' groupId='210580'/>
<interLinkingParamValue value='White | Белый 6000 K,Warm | Тёплый 2700 K' color='White | Белый 6000 K,Warm | Тёплый 2700 K' imageUrl='https://site.ru/#f2fafb#f8c077.jpg' groupId='210373'/>
<interLinkingParamValue value='White | Белый 6000 K,Warm | Тёплый 2700 K' color='White | Белый 6000 K,Warm | Тёплый 2700 K' imageUrl='https://site.ru/#f2fafb#f8c077.jpg' groupId='202392'/>
<interLinkingParamValue value='White | Белый 6000 K,Warm | Тёплый 2700 K' color='White | Белый 6000 K,Warm | Тёплый 2700 K' imageUrl='https://site.ru/#f2fafb#f8c077.jpg' groupId='201818'/>

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

Автор решения: Konstantin Likhachev

Рекомендую использовать для этого функции из D7, получится всего один запрос. Не забудьте поменять символьные коды свойств и ID инфоблока на нужные

// ID элементов
$strValue     = '250428, 250427';
$arElementIds = explode(',', $strValue);

$result = [];

// Получаем класс для работы с инфоблоком
$iblockClass = \Bitrix\Iblock\Iblock::wakeUp(73)->getEntityDataClass(); // ID инфоблкоа
// Получаем список элементов с указанными ID
$elements = $iblockClass::getList([
    'filter' => ['ID' => $arElementIds],
    'select' => ['COLOR_WAVE_LENGTH', 'COLOR_HEX'], // Коды свойств
]);

// Идем по элементам
while ($element = $elements->fetchObject()) {
    // Получаем ID элемента
    $id = $element->getId();

    // Получаем в массив все значения множественного свойства
    $waveLength = array_map(static function ($value) {
        return $value->getValue();
    }, $element->get('COLOR_WAVE_LENGTH')?->getAll());

    // Аналогично
    $hex = array_map(static function ($value) {
        return $value->getValue();
    }, $element->get('COLOR_HEX')?->getAll());

    // Бежим по полученным значениям и записываем строки в массив $result
    array_walk($waveLength, static function ($item, $index) use (&$result, $hex, $id) {
        $result[] = sprintf(
            '<interLinkingParamValue value="%s" color="%1$s" imageUrl="https://site.ru/%s.jpg" groupId="%d" />',
            $item,
            $hex[$index],
            $id
        );
    });
}

// Выводим массив как строку, склеив переносами строк
echo implode(PHP_EOL, $result);
→ Ссылка