<?
/////////////////////////////////////////////////////////////////
// Функции для работы с массивами
/////////////////////////////////////////////////////////////////
// ------------------------------------------------------------
// Группировка по значению элемента ассоциативного массива (очень круто)
// ------------------------------------------------------------
$resultArray = array();
$inputArray = array(
array('name' => 'Имя 1', 'group' => 'Значение 3'),
array('name' => 'Имя 2', 'group' => 'Значение 1'),
array('name' => 'Имя 3', 'group' => 'Значение 2'),
array('name' => 'Имя 3', 'group' => 'Значение 3'),
);
array_walk($inputArray, function($item, $key) use (&$resultArray) {
$resultArray[$item['group']][] = $item;
});
echo "<pre>";
print_r($resultArray);
echo "</pre>";
// ------------------------------------------------------------
// Группировка для битрикса по разделам (один уровень - раздел, элементы)
// ------------------------------------------------------------
$arItems = $arResult["ITEMS"]; // Элементы отсортированы в настройках компонента
$arrGroupBySectionID = array();
array_walk($arItems, function($item, $key) use (&$arrGroupBySectionID) {
$arrGroupBySectionID[$item['IBLOCK_SECTION_ID']][] = $item;
});
// Собираем отсортированные группы (по порядку сортироввки )
$arrSections = array();
$resSec = CIBlockSection::GetList(array("SORT"=>"ASC"),
array("IBLOCK_ID"=>$arParams["IBLOCK_ID"]), false,
array("IBLOCK_ID","ID", "NAME"), false);
$i = 0;
while ($ob = $resSec->GetNext()) {
$sectionID = $ob["ID"];
$arrSections[$i] = $ob;
$arrSections[$i]["ITEMS"] = $arrGroupBySectionID[$sectionID];
$i++;
}
// Выводим в шаблон:
foreach($arrSections as $section):
// $section["ID"]; $section["NAME"];
foreach($section["ITEMS"] as $arItem):
// $arItem['ID']; $arItem['NAME']
endforeach;
endforeach;