Есть массив ID элементов инфоблока с ID 41:
[0] => 1305 [1] => 1306 [2] => 1307 [3] => 1308 [4] => 1310 [5] => 1311
Нужно получить все свойства каждого элемента и отсортировать массив по ID в порядке убывания.

Решение
Ниже приведён пример типового кода на Bitrix API (PHP), который:
- Берёт массив ID элементов инфоблока с ID=41,
- Загружает для каждого элемента его поля и все свойства,
- Сортирует выборку по убыванию ID.
<?php
// Предположим, у нас есть исходный массив ID
$arIDs = [1305, 1306, 1307, 1308, 1310, 1311];
// Задаём поля, которые хотим получить (включая все свойства — PROPERTY_*)
$arSelect = [
'ID',
'NAME',
'DETAIL_PAGE_URL',
'PREVIEW_PICTURE',
'DETAIL_PICTURE',
'PREVIEW_TEXT',
'DETAIL_TEXT',
'PROPERTY_*'
];
// Фильтр по нашему инфоблоку и списку ID
$arFilter = [
'IBLOCK_ID' => 41,
'ID' => $arIDs,
'ACTIVE' => 'Y'
];
// GetList с сортировкой по ID => DESC даст сразу убывающий порядок
$rsElements = CIBlockElement::GetList(
['ID' => 'DESC'], // сортируем по ID в убывающем порядке
$arFilter,
false,
false,
$arSelect
);
$arResult = [];
while ($obElement = $rsElements->GetNextElement())
{
// Берём основные поля
$arFields = $obElement->GetFields();
// Берём свойства
$arProps = $obElement->GetProperties();
// Собираем всё в итоговый массив
$arResult[] = [
'FIELDS' => $arFields,
'PROPERTIES' => $arProps
];
}
// Теперь $arResult будет содержать все необходимые данные,
// при этом элементы уже отсортированы в порядке убывания ID.
?>
Если по каким-то причинам нужно было бы вручную отсортировать уже собранный массив (например, после дополнительной обработки), то можно использовать стандартную функцию usort
, сравнивая по индексу 'FIELDS']['ID'
:
usort($arResult, function($a, $b) {
// Сравниваем значения ID в убывающем порядке
return (int)$b['FIELDS']['ID'] - (int)$a['FIELDS']['ID'];
});
Но в большинстве случаев удобнее задать сортировку сразу в методе CIBlockElement::GetList()
.