Получение свойств методом GetPropertyValuesArray() для любого количества элементов обходятся статичным количеством запросов, за исключением получения значений списочных свойств, запросы на получение которых выполняются в цикле для каждого значения свойства.
Пример получения данных:
| Код |
|---|
$elements = [];
$order = ['SORT' => 'ASC'];
$filter = ['IBLOCK_ID' => 1];
$rows = CIBlockElement::GetList($order, $filter);
while ($row = $rows->fetch()) {
$row['PROPERTIES'] = [];
$elements[$row['ID']] =& $row;
unset($row);
}
CIBlockElement::GetPropertyValuesArray($elements, $filter['IBLOCK_ID'], $filter);
unset($rows, $filter, $order); |
Чтобы итоговый результат GetPropertyValuesArray() был таким же, как при использовании GetNextElement() совместно с GetProperties() в массиве, передаваемом первым параметром ключами элементов должны быть их идентификатора, а так же у каждого элемента должен быть определен пустой ключ "PROPERTIES" не равный null, иначе данные элемента будут перезаписаны данными их свойств.
| Цитата |
|---|
| Строго рекомендуется как замена кода вида ... GetNextElement() ... GetProperties() |
Метод GetPropertyValuesArray() актуален только если речь идет о получении данных свойств нескольких элементов инфоблока, от двух элементов и более.
Если необходимо получить данные только одного элемента инфоблока, то лучше пользоваться связкой GetNextElement() ... GetProperties(), т.к. в этом случае GetPropertyValuesArray() проигрывает ему как в количестве выполняемых запросов, так и в скорости получения итогового результата примерно в 2 раза.