Ругается на count() в php 8.1

Здравствуйте,

Продолжаю страдать после переезда на php 8.1

Теперь перестал работать цикл. Ругается на count()

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

Вот кусок кода, где он применяется:

PHP:
  1. $data = $db->loadObjectList();
  2.  
  3. foreach ($data as $var)
  4. {
  5.           $content_id_array[] = $var->content_id;
  6. }
  7.  
  8. for ($i=0; $i < count($content_id_array); $i++)
  9. {
  10.            
  11. }

Не могу починить :(

Подскажите.
— Добавлено —
Содержимое массива $content_id_array

array(32) { [0]=> string(4) «1566» [1]=> string(4) «1533» [2]=> string(4) «1524» [3]=> string(4) «1526» [4]=> string(4) «1448» [5]=> string(4) «1433» [6]=> string(4) «1367» [7]=> string(4) «1356» [8]=> string(4) «1299» [9]=> string(4) «1275» [10]=> string(4) «1268» [11]=> string(4) «1247» [12]=> string(4) «1227» [13]=> string(4) «1207» [14]=> string(4) «1221» [15]=> string(4) «1219» [16]=> string(4) «1202» [17]=> string(4) «1187» [18]=> string(4) «1177» [19]=> string(4) «1132» [20]=> string(4) «1134» [21]=> string(4) «1025» [22]=> string(3) «821» [23]=> string(3) «824» [24]=> string(3) «765» [25]=> string(3) «757» [26]=> string(3) «655» [27]=> string(3) «654» [28]=> string(3) «637» [29]=> string(3) «635» [30]=> string(3) «577» [31]=> string(3) «559» }
— Добавлено —
и вот так выводит без ошибок

Код (Text):
  1. echo count($content_id_array); //32
 

Очевидно ты не на то место в коде смотришь ИЛИ переменная в том месте таки null. Не спорь с интепретатором )))

Я даже вижу в каком случае она null — когда $data получился пустой. Ты же НЕ инициировал $content_id_array пустым массивом до foreach. Это грубая логическая ошибка.

 

Блин и правда есть второй такой же кусок кода ниже.
Там и был null o_O

Опять носом натыкали :rolleyes:

 

Я не поленился и проверил. Действительно совсем старые версии PHP не ругаются на count(null). Но даже тогда это был плохой код с неинициированной переменной, просто проблема пряталась.

https://onlinephp.io?s=ZczBCsIwEIThs4F9hxFyaOmh3tvig4iUmEayUJMQN0IQ392Kx56_f2Y8J59I9T1qLPDm5SARHFjYiAMLbhXukaTC5GzqRk9xZjmS0jYGcUFmXua_TQhlXQdSpO4xo9E8nQZoxggbS5BmN2l_3HUtqTepg7M-YtdcNF-3z88X&v=8.1.25,7.4.33,7.0.33,5.6.40,8.2.10

Screenshot 2023-11-27 at 15.07.16.png

 

Т е даже если массив будет пустой, но заранее инициирован, то ошибки не будет?

 

Если инициирован, то не будет

PHP:
  1. echo count((array) $x );

Тоже происходит с первым параметром foreach, котрый д.б. array или object

PHP:
  1. foreach( (object) $node as $key => $value)
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *