1С-Битрикс и PHP 8: Справляємося з помилкою Argument #1 ($value) must be of type Countable|array

Сучасні технології постійно розвиваються, і це часто призводить до виникнення різноманітних помилок при взаємодії різних систем та версій. Одна з таких помилок у системі 1С-Битрикс, зокрема при роботі з PHP версії 8, виглядає ось так:

Argument #1 ($value) must be of type Countable|array, null given (0)

Ця помилка часто з’являється при роботі з функціями, як-от count(), sort(), ksort() та іншими.

Проблема: В коді 1С-Битрикс зустрічаються конструкції типу:

	 if (count($arResult["ITEMS"]) > 0) {}

	

Або

	 if (count($arResult["ITEMS"])) {}

	

Ці конструкції раніше повертали false, якщо $arResult["ITEMS"] був пустим масивом або взагалі не був визначений. Але тепер, при спробі "порахувати" значення, яке не є Countable або array (наприклад, якщо це ціле число), ви отримаєте помилку.

Рішення:

  1. Перш за все, потрібно перевірити, чи є змінна "підраховуваною":
	 if (is_countable($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)

	

Або можна перевірити, чи є це масивом:

	 if (is_array($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)

	

Таким чином, ми забезпечуємо, що змінна існує, визначена і може бути "підрахована".

  1. Для функцій сортування, таких як sort(), ksort() і т.д., можна використовувати такий код:
	 if (is_array($arResult["ITEMS"])) sort($arResult["ITEMS"]);

	
  1. Інший варіант - це явне приведення значення до потрібного типу:
	 $arResult["ITEMS"] = (array)$arResult["ITEMS"];

	

Або

	 sort((array)$arResult["ITEMS"]);

	

Але тут важливо знати, що первинне значення буде приведено до типу Array, що може бути непридатним у певних контекстах.

На завершення, завжди важливо тестувати ваш код після змін, щоб переконатися, що все працює правильно та ефективно.

Повернення до списку