Question

J'ai un tableau qui contient les catégories d'un article particulier ($ link_cat). J'utilise ensuite mysql_fetch_array pour imprimer toutes les catégories disponibles dans une liste avec des cases à cocher. Pendant ce temps, je veux qu'il compare la valeur sur laquelle il se trouve, à une valeur de l'autre tableau. S'il y a correspondance, cela signifie alors que l'une des catégories s'applique à cet article et qu'il convient d'imprimer une ligne de code pour appliquer l'attribut vérifié. génial! sauf que ça ne marche pas = [

    while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ){
    $cat[$i] = $row['category'];
    $cat_id[$i] = $row['cat_id'];

    echo '<li><input type="checkbox" ';

    $catCount = count($link_cat);
    for ($ct = 0; $ct < $catCount; $ct++){
        if ($cat_id[$i] == $link_cat[$ct]){ 
            echo 'checked="checked" ';
        }
    }

    echo 'name="' . $cat_id[$i] . '" />' . $cat[$i] . '</li>';

    $i++;
}

Je n'ai jamais vraiment fait de boucle imbriquée auparavant (je suppose que c'est le problème).

Le problème semble être que lorsque cela fonctionne, $ link_cat [0], qui contiendra la première catégorie à vérifier, ne s'enregistre pas. Il est vide. L'impression de variables à l'intérieur de la boucle for a confirmé cela. Tous les autres [1] [2], etc., vont bien. C'est juste [0]. Mais pourquoi? cela ne semble avoir aucun sens. Je sais qu'il y a quelque chose là-dedans, car j'ai imprimé le contenu du tableau au fur et à mesure que je le remplissais, juste pour vérifier. Pourtant, cela ne se voit pas uniquement pendant la boucle. Des idées?

Était-ce utile?

La solution

Légère correction de bogue (et changement de style flagrant): votre version peut imprimer coché = " coché " plusieurs fois. Est-ce que $ cat et $ cat_id doivent être des tableaux?

while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ) {
    $cat = $row['category'];
    $cat_id = $row['cat_id'];

    echo '<li><input type="checkbox" ';
    if ( in_array($cat_id, $link_cat) ) {
        echo 'checked="checked" ';
    }
    echo "name='$cat_id' />$cat</li>";
}

Pour les situations dans lesquelles on jetterait normalement un débogueur sur un problème, j'aime bien ajouter un beau print_r dans un bloc de commentaires (view-source pour la sortie de débogage, plus sûr sur les sites dynamiques).

echo '<!-- ' . print_r($link_cat, TRUE) . ' -->';

Autres conseils

Alors qu'au départ, je me trompais énormément au sujet de la boucle en boucle nécessitant une réinitialisation, je ne peux pas m'empêcher de penser que la boucle dans cette matrice n'est pas le moyen le plus rapide de faire ce que vous cherchez.

Peut-être que array_search ferait bien, ou peut-être array_key_exists . in_array ressemble à un gagnant, mais je n'y ai pas pensé il

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top