Здравствуйте, не очень понятно, что именно не то. Попробуйте вот такой код. Внимательно прочитайте комментарии — там важная информация. Если до этого в запросе элементов у вас получалось всё время не то, а сейчас в ['ITEM'] будет записано только нужное, то я просто добавил 'IBLOCK_ID' в селектор полей элементов:
[CODE]<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
$IBLOCK_ID = 7;
$arLocationsResult = array();
$arLocationsId = array();
$dbSect = CIBlockSection::GetList(
array(),
array(
'IBLOCK_ID' => $IBLOCK_ID,
'ACTIVE' => 'Y'
),
false,
array('ID', 'NAME'),
false
);
while ($ob = $dbSect->GetNextElement()) {
$arFields = $ob->GetFields();
// Запишем идентификаторы, чтоб сделать единственный запрос
$arLocationsId[] = $arFields['ID'];
$arLocationsResult[] = array(
'ID' => $arFields['ID'],
'NAME' => $arFields['NAME'],
'ITEM' => array(),
);
}
// Делаем единственный запрос
$dbElem = CIBlockElement::GetList(
array(),
array(
'IBLOCK_ID' => $IBLOCK_ID,
'ACTIVE' => 'Y',
'SECTION_ID' => $arLocationsId
),
false,
false,
array('ID', 'IBLOCK_ID', 'NAME', 'SECTION_ID')
);
while ($ob = $dbElem->GetNextElement()) {
$arFields = $ob->GetFields();
// Хорошо бы заменить, например, на что-нибудь начинающееся на array_ из php 7
foreach ($arLocationsResult as &$locationItem) {
// Не уверен, что ключ SECTION_ID будет доступен,
if ($locationItem['ID'] === $arFields['SECTION_ID']) {
$locationItem['ITEM'][] = $arFields;
break;
}
}
}
echo '<pre>', var_dump($arLocationsResult), '</pre>';
?>
[/CODE]