За последние 24 часа нас посетили 39375 программистов и 7582 робота. Сейчас ищут 1527 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем Mick_20, 27 ноя 2023.

  1. Mick_20

    Mick_20 Активный пользователь

    С нами с:
    10 дек 2012
    Сообщения:
    19
    Симпатии:
    1
    Адрес:
    Россия, Новосибирск
    Здравствуйте,

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

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

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

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

    PHP:
    1. ...
    2. $data = $db->loadObjectList();
    3.  
    4. foreach ($data as $var)
    5. {
    6.           $content_id_array[] = $var->content_id;
    7. }
    8.  
    9. for ($i=0; $i < count($content_id_array); $i++)
    10. {
    11.            ...
    12. }
    Не могу починить :(

    Подскажите.
    --- Добавлено ---
    Содержимое массива $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
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    Очевидно ты не на то место в коде смотришь ИЛИ переменная в том месте таки null. Не спорь с интепретатором )))

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

    Mick_20 Активный пользователь

    С нами с:
    10 дек 2012
    Сообщения:
    19
    Симпатии:
    1
    Адрес:
    Россия, Новосибирск
    Блин и правда есть второй такой же кусок кода ниже.
    Там и был null o_O

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

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    Я не поленился и проверил. Действительно совсем старые версии 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
     
    Mick_20 нравится это.
  5. Mick_20

    Mick_20 Активный пользователь

    С нами с:
    10 дек 2012
    Сообщения:
    19
    Симпатии:
    1
    Адрес:
    Россия, Новосибирск
    Т е даже если массив будет пустой, но заранее инициирован, то ошибки не будет?
     
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    485
    Симпатии:
    97
    Адрес:
    Бавария, Германия
    Если инициирован, то не будет
    PHP:
    1. echo count((array) $x );
    Тоже происходит с первым параметром foreach, котрый д.б. array или object
    PHP:
    1. foreach( (object) $node as $key => $value)