Получения всех свойств массива элементов инфоблока в Битриксе

Есть массив ID элементов инфоблока с ID 41:

        [0] => 1305
        [1] => 1306
        [2] => 1307
        [3] => 1308
        [4] => 1310
        [5] => 1311
    

Нужно получить все свойства каждого элемента и отсортировать массив по ID в порядке убывания.

Получения всех свойств массива элементов инфоблока в Битриксе

Решение

Ниже приведён пример типового кода на Bitrix API (PHP), который:

  1. Берёт массив ID элементов инфоблока с ID=41,
  2. Загружает для каждого элемента его поля и все свойства,
  3. Сортирует выборку по убыванию 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().

Теги:  Битрикс, рецепты

Интернет-магазин от 120 000 руб., срок от 4 недель

Платформа для продажи товаров или услуг. Включает интерактивные формы обратной связи в каждой карточке товара, а также множество статичных и динамичных разделов.

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

Компактный сайт, идеально подходящий для старта. На одной странице можно представить ключевые преимущества вашей компании и разместить форму для обратной связи.