1С-Битрикс и PHP 8: Преодолеваем ошибку Argument #1 ($value) must be of type Countable|array

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

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

Особенно это актуально при работе с такими функциями, как count(), sort(), ksort() и другими.

Суть проблемы: Часто в коде 1С-Битрикс можно встретить следующие конструкции:

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

Или

Раньше такие проверки корректно работали, когда $arResult["ITEMS"] был пустым массивом или вообще не был определен. Однако теперь при попытке применить count() к несчетному значению (например, если это целое число), вы получите ошибку.

Как исправить:

  1. Прежде всего, проверьте, счетно ли значение:
	 if (is_countable($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)

	

Или проверьте, является ли это массивом:

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

	

Для функций сортировки, таких как sort(), ksort() и прочих, рекомендуется использовать:

	 if (is_array($arResult["ITEMS"])) sort($arResult["ITEMS"]);

	
  1. Также можно явно привести значение к нужному типу:е:
	 $arResult["ITEMS"] = (array)$arResult["ITEMS"];
	

Или

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

В заключение, всегда проверяйте ваш код после внесения изменений, чтобы гарантировать его корректную работу.

Возврат к списку