Вы сейчас сначала выбираете из базы все элементы с их свойствами (CIBlockElement::GetList), затем в цикле для каждого элемента дополнительно загружаете ещё раз все его свойства (CIBlockElement::getProperty), а затем ещё одним запросом в цикле получаете данные о связанном элементе (getElementByID), который будет везде одинаков т.к. вы выбираете с фильтрацией как раз по этому свойству.
Я бы предложил сделать так: сначала загрузить все новости, собрать ID связанных типов спорта, потом подгрузить одним отдельным запросом нужную инфу по типам спорта, и распихать её по новостям. Примерный код будет такой:
function sportNews($iblockId, $sportTypeId) {
$arSelect = ["*", "PROPERTY_*", "PROPERTY_SPORT_TYPE"]; // Добавить в выборку поле типов спорта. Отдельно с указанием кода - чтобы можно было к нему обращаться по коду, а не по ID
$arFilter = ["IBLOCK_ID" => $iblockId, "=PROPERTY_SPORT_TYPE" => $sportTypeId];
$arItems = [];
$res = CIBlockElement::GetList([], $arFilter, false, ["nPageSize" => 500], $arSelect);
$sportTypes = []; // Массив, в который мы собираем ID связанных типов спорта
while ($arItem = $res->fetch()) {
$sportTypes = array_merge($sportTypes, $arItem['PROPERTY_SPORT_TYPE_VALUE']); // Собираем в массив
$arItems[] = $arItem;
}
if (!empty($sportTypes)) {
$sportTypes = array_unique($sportTypes);
$arFilterSport = ['ID' => $sportTypes, 'IBLOCK_ID' => 'ИД Инфоблока типов спорта'];
$resSport = CIBlockElement::GetList([], $arFilterSport);
$sportReference = [];
while ($arItem = $resSport->fetch()) {
$sportReference[$arItem['ID']] = $arItem; // Раскладываем выбранные типы спорта в ассоциативный массив по ID'шникам
}
foreach ($arItems as $ind => $arItem) { // Проходимся по всем новостям
$arItems[$ind]['SPORT_TYPE'] = [];
foreach ($arItem['PROPERTY_SPORT_TYPE_VALUE'] as $sportTypeId) {
$arItems[$ind]['SPORT_TYPE'][] = $sportReference[$sportTypeId]; // Рассовываем в них загруженные типы спорта
}
}
}
return $arItems;
}
$iblockId = 10; // ID инфоблок новости спорта
$sportTypeId = 5; // ID элемента инфоблока виды спорта (футбол)
sportNews($iblockId, $sportTypeId);