[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

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    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

    Registriert seit:
    6. August 2011
    Beiträge:
    33
    Danke erhalten:
    0
    Habe das gleiche auf meiner Sitemap - gibts da Lösungen?
     
  3. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    34.389
    Danke erhalten:
    10.745
    Danke vergeben:
    1.528
    noch nicht,
     
  4. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.531
    Danke erhalten:
    1.632
    Danke vergeben:
    126
    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) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    18.259
    Danke erhalten:
    7.015
    Danke vergeben:
    2.138
    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

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    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) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    18.259
    Danke erhalten:
    7.015
    Danke vergeben:
    2.138
    Die Lösung ist simpel und gar nicht so schlecht.
     
  9. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    488
    Danke erhalten:
    50
    Danke vergeben:
    60
    #9 MJ, 8. Januar 2020
    Zuletzt bearbeitet: 8. Januar 2020
    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?
     
  10. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.531
    Danke erhalten:
    1.632
    Danke vergeben:
    126
    So, wie $ordersStatusDataArray in admin/orders.php gebaut wird, sollte das eigentlich immer ein Array sein, ja.
     
  11. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    488
    Danke erhalten:
    50
    Danke vergeben:
    60
    #11 MJ, 8. Januar 2020
    Zuletzt bearbeitet: 8. Januar 2020
    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
     
  12. Anonymous

    Anonymous Erfahrener Benutzer
    Mitarbeiter

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.531
    Danke erhalten:
    1.632
    Danke vergeben:
    126
    Genau das sollte eigentlich nicht möglich sein, denn:
     
  13. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    488
    Danke erhalten:
    50
    Danke vergeben:
    60
    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

    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.531
    Danke erhalten:
    1.632
    Danke vergeben:
    126
    Prost. :)