WordPress : Comment éviter les erreurs dénombrables php sur ce qui semble être des tableaux valides

Publié par Jean-Michel le

Je reçois une erreur php count(), ‘Attention : count() : Le paramètre doit être un tableau ou un objet qui implémente Countable’ sur ce qui est clairement un tableau. Le code fonctionne toujours, mais j’aimerais savoir comment recoder pour éviter les messages d’avertissement.

Tout d’abord, j’ai un tableau multidimensionnel (print_f dump):

$icons Array
(
[0] => Array
    (
        [image] => 12811
        [label] => Chemical
        [categories] => Array
            (
                [0] => 209
            )

    )

[1] => Array
    (
        [image] => 12812
        [label] => Cut
        [categories] => Array
            (
                [0] => 236
            )

    )

[2] => Array
    (
        [image] => 12813
        [label] => Flame
        [categories] => Array
            (
                [0] => 256
                [1] => 252
            )

    )
)

Et je fais correspondre les termes WordPress aux images :

<?php
$terms = wp_get_post_terms( get_the_ID(), 'product_categories', array("fields" => "ids"));
if($icons) {

foreach($icons as $row) {
    for($i=0; $i<count($row['categories']); $i++) {
        for($j=0; $j<count($terms); $j++) {
            if($row['categories'][$i]==$terms[$j]) {
                       array_push($icon_img_ary,$row['image']);
                                $icon_img_ary_unq=wg_unique_array($icon_img_ary);
                       }
                }
          }
      }
}
} ?>

L’erreur se produit dans la première boucle for() lors du comptage du tableau imbriqué. J’utilise en fait ce même code depuis des mois maintenant, avec deux instances sur deux documents distincts. Je n’obtiens cette erreur que sur l’un des documents. Je me suis arraché les cheveux en essayant de comprendre pourquoi le tableau ne tape pas comme un tableau.

J’ai vu des solutions discutées qui utilisent la variable de tableau && count($array) dans un conditionnel ?? C’est comme une toute nouvelle syntaxe qui génère ensuite des erreurs sur les ‘;’ suivants. ou {} caractères. Très confus, j’essaie de comprendre. Toute aide serait très appréciée, merci !

Solution n°1 trouvée

Vous pouvez utiliser la fonction is_countablesi vous n’êtes pas sûr de pouvoir utiliser countla variable en question.

Solution n°2 trouvée

Vous pouvez utiliser is_countable()si vous utilisez PHP 7.3sinon vous pouvez utiliser is_array().

Pour PHP 7.3 ou supérieur :

<?php
$terms = wp_get_post_terms( get_the_ID(), 'product_categories', array("fields" => "ids"));
if($icons) {

    foreach($icons as $row) {
        if ( is_countable( $row['categories'] ) ) {
            for($i=0; $i<count($row['categories']); $i++) {
                for($j=0; $j<count($terms); $j++) {
                    if($row['categories'][$i]==$terms[$j]) {
                        array_push($icon_img_ary,$row['image']);
                        $icon_img_ary_unq=wg_unique_array($icon_img_ary);
                    }
                }
            }
        }
    }
}
?>

Pour PHP 7.3 ci-dessous :

<?php
$terms = wp_get_post_terms( get_the_ID(), 'product_categories', array("fields" => "ids"));
if($icons) {

    foreach($icons as $row) {
        if ( is_array( $row['categories'] ) ) {
            for($i=0; $i<count($row['categories']); $i++) {
                for($j=0; $j<count($terms); $j++) {
                    if($row['categories'][$i]==$terms[$j]) {
                        array_push($icon_img_ary,$row['image']);
                        $icon_img_ary_unq=wg_unique_array($icon_img_ary);
                    }
                }
            }
        }
    }
}
?>
Catégories : Wordpress

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *