Блог разработчика 1С-Битрикс

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

Есть массив 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().

Теги:  рецепты


Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Участие в проекте

привлечение в проект на part-time основе

от 20 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.