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() к несчетному значению (например, если это целое число), вы получите ошибку.
Как исправить:
- Прежде всего, проверьте, счетно ли значение:
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"]);
- Также можно явно привести значение к нужному типу:е:
$arResult["ITEMS"] = (array)$arResult["ITEMS"];
Или
Но помните, что начальное значение будет приведено к типу Array, что может быть нецелесообразно в некоторых случаях.
В заключение, всегда проверяйте ваш код после внесения изменений, чтобы гарантировать его корректную работу.