Разница между Fetch, GetNext и GetNextElement

Fetch()

Метод Fetch() выводит данные как есть, без преобразований. Также данный метод не преобразует ссылки на страницу элемента, что уменьшает запросы к базе данных.

Рекомендуется использовать, когда надо просто вывести элементы без ссылок на их страницу.

Если данные не имеют свой URL (логотипы, бренды, статистика), то их рекомендуется создавать в Хайлоад (Highload) блоках.

getNext()

Метод getNext() выполняет для каждого свойства функцию htmlspecialchars(), при этом изначальное свойство хранится с тем же именем, но перед ним указан символ «~».

$res = CIBlockElement::GetList(array(), array('IBLOCK_ID' => 2));

while ($element = $res->getNext()) {
    $element['NAME'];  // Тег <h1>
    $element['~NAME']; // Тег <h1>
}

Метод getNext() также возвращает ссылку на страницу элемента по шаблону в настройках инфоблока (для этого делается дополнительный запрос в базу данных для каждого элемента).

GetNextElement()

Метод GetNextElement() работает также, как и метод getNext(), только также выбирает все пользовательские свойства элемента.

$res = CIBlockElement::GetList(array(), array('IBLOCK_ID' => 2));

while ($element = $res->GetNextElement()) {
    $element->GetFields();     // Свойства элемента по умолчанию
    $element->GetProperties(); // Пользовательские свойства элемента
}