WordPress : Comment éviter les erreurs dénombrables php sur ce qui semble être des tableaux valides
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_countable
si vous n’êtes pas sûr de pouvoir utiliser count
la variable en question.
Solution n°2 trouvée
Vous pouvez utiliser is_countable()
si vous utilisez PHP 7.3
sinon 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);
}
}
}
}
}
}
?>
0 commentaire