Jörg: Seltsames Verhalten von count()?

Hallo Forum,

ich habe folgenden Quellcode:

echo("<pre>");
print_r($myArray);

if(count($myArray > 0)) {
echo "Hello World";
exit;
//... usw.
}

Der ergibt in der Ausgabe:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 6796
                    [1] => 33857_18072022125416_62d53bdd18482ee5d247e54c88b82ce2dc121dbd8f3582
                    [2] => pdf
                    [3] => 245168
                    [4] => qa
                    [5] => 18-07-2022
                    [6] => 
                    [7] => 
                    [8] => 
                )

            [1] => Array
                (
                    [0] => 6795
                    [1] => 4173_33857_18072022120610_62d5309345c34437786c5645a79f2d09e29b9db92b0a44
                    [2] => pdf
                    [3] => 241411
                    [4] => qq
                    [5] => 18-07-2022
                    [6] => 
                    [7] => 
                    [8] => 
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] => 7281
                    [1] => 34141_10082022101805_62f369bfd5988b6c35c7a8e521b6967e8f056d3bd0258c
                    [2] => pdf
                    [3] => 237962
                    [4] => qa
                    [5] => 10-08-2022
                    [6] => 
                    [7] => 
                    [8] => 
                )

            [1] => Array
                (
                    [0] => 7276
                    [1] => 4527_34141_10082022100425_62f3668243d328e1e8d6a934aa00037818f398c89087dc
                    [2] => pdf
                    [3] => 239846
                    [4] => qq
                    [5] => 10-08-2022
                    [6] => 
                    [7] => 
                    [8] => 
                )
        )
)

Fatal error:  Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, bool given in

Ist mein assoziatives Array für count() seit php 8 nicht mehr Array genug?

Jörg

  1. Hallo Jörg,

    if(count($myArray > 0)) {
    echo "Hello World";
    exit;
    }
    
    Fatal error:  Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, bool given in
    

    Ist mein assoziatives Array für count() seit php 8 nicht mehr Array genug?

    du übergibst kein Array an count(), sondern den boolschen Ausdruck $myArray > 0.
    Und der ist nicht zählbar.

    Einen schönen Tag noch
     Martin

    --
    "Formschön, wetterfest, zweckfrei, und gegen Aufpreis auch entnehmbar."
    - Loriot, Familien-Original-Benutzer
    1. Hallo Martin,

      du übergibst kein Array an count(), sondern den boolschen Ausdruck $myArray > 0.
      Und der ist nicht zählbar.

      Ach Herrje, natürlich.
      Danke für die Hilfe.

      Jörg

  2. Hallo,

    Ist mein assoziatives Array für count() seit php 8 nicht mehr Array genug?

    Drei Dinge fallen mir auf:

    1. Ich seh kein assoziatives Array, sondern ein mehrdimensionales;
    2. Die Fehlermeldung „Bool given“ ist zielführend, was den eigentlichen Fehler betrifft (Klammern!)
    3. Nachschlagen bei count im php.net erzählt was von einem mode-Argument, was vielleicht hier auch noch gesetzt werden muss.

    Gruß
    Kalk

  3. Warum hat php7 das noch akzeptiert?

    1. Hallo

      Warum hat php7 das noch akzeptiert?

      Das kannst du eins, zwei, fix in der Doku zu count [1] im Changelog der Funktion nachlesen.

      Tschö, Auge

      --
      200 ist das neue 35.

      1. Doku zu count, nicht Count Dooku ↩︎

      1. Hallo Auge,

        und hier kannst Du Dir Version für Version angucken, was passiert.

        • Vor 7.2: COUNT(false) == 1, kommentarlos
        • 7.2-7.4: COUNT(false) == 1, mit Warnung

        Warning: count(): Parameter must be an array or an object that implements Countable in /home/user/scripts/code.php on line 6

        • 8.0ff : COUNT(false) == TypeError

        Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, bool given in /home/user/scripts/code.php:6

        Warnungen zu ignorieren zahlt sich bei PHP nicht aus. PHP ist für breaking changes bekannt.

        Wobei ich eigentlich erwarten würde, dass schon ein Vergleich von Array und Zahl einen TypeError liefert.

        Rolf

        --
        sumpsi - posui - obstruxi