[PHP 7.2] Problem mit "count()"

Thema wurde von Manni_HB, 16. März 2018 erstellt.

  1. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    PHP 7.2 und "count()" und "sizeof()" sind scheinbar nicht die besten Freunde!?

    Wie geht ihr z.B. um mit:
    ""count(): Parameter must be an array or an object that implements Countable"
     
  2. Anonymous

    Anonymous Aktives Mitglied

    Habe das gleiche auf meiner Sitemap - gibts da Lösungen?
     
  3. barbara

    barbara G-WARD 2014-2020

    noch nicht,
     
  4. Anonymous

    Anonymous Erfahrener Benutzer Mitarbeiter

    Suchst du so etwas?

    PHP:
    $num = is_array($foo) || (is_object($foo) && $foo instanceof Countable) ? count($foo) : 0;
    // oder
    $num = count((array)$foo);
     
  5. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Für die HTML Sitemap haben wir das gestern als Bug erfasst, somit ist Lösung absehbar:
    https://tracker.gambio-server.net/issues/58138
     
  6. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Oder auf die rustikale Art:
    Code:
    function ZAWU_COUNT_ARRAY ($f_array) {
     
        if ( is_array($f_array) ) {
         
            $ret = count($f_array);
         
        } else {
         
            $ret = 0;
         
        }
     
        return $ret;
     
    }
    Und dann alle (eigenen!!!) Scripte per suchen/ersetzen "count" und "sizeof" alle ersetzen => Fertisch!
     
  7. Habe (bis von Gambio die End-Lösung kommt) in der media/content/sitemap.php Zeile 36
    (Original)
    if (sizeof($gm_tree) > 0) {

    geändert in:
    if (sizeof((array)$gm_tree) > 0) {

    Nun ist die Warnung erst mal weg und die sitemap funktioniert.
     
  8. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Die Lösung ist simpel und gar nicht so schlecht.
     
  9. MJ

    MJ Erfahrener Benutzer

    Bin ich der Einzige, der das in der admin/hmtl/compatibility/order_details.php ( #804 ff ) auch hat?

    v3.15.1.2

    - Sollte $orderStatusRow['comments'] hier ein Array sein?
     
    Zuletzt bearbeitet: 8. Januar 2020
  10. Anonymous

    Anonymous Erfahrener Benutzer Mitarbeiter

    So, wie $ordersStatusDataArray in admin/orders.php gebaut wird, sollte das eigentlich immer ein Array sein, ja.
     
  11. MJ

    MJ Erfahrener Benutzer

    Hallo Marco
    Bei mir steht in der order_details an besagter Stelle:
    PHP:
    echo((count($orderStatusRow['comments']) > 0) ? '<span class="order-status-comment-tooltip" data-gx-widget="tooltip_icon" data-tooltip_icon-type="info">' : '');
    echo((
    count($orderStatusRow['comments']) > 1) ? '<ul>' : '');
    $orderStatusRow['comments'] ist aber ein String im Array $orderStatusRow das im Array $ordersStatusDataArray enthalten ist.

    Liege ich falsch?


    PS: PHP 7.3
     
    Zuletzt bearbeitet: 8. Januar 2020
  12. Anonymous

    Anonymous Erfahrener Benutzer Mitarbeiter

    Genau das sollte eigentlich nicht möglich sein, denn:
     
  13. MJ

    MJ Erfahrener Benutzer

    Hallo Marco

    Okay Danke. Ich hab's gefunden. Lag natürlich nicht am Original Code. War mein Bier. Vielen Dank!
     
  14. Anonymous

    Anonymous Erfahrener Benutzer Mitarbeiter

    Prost. :)