Domanda

Ho un array che contiene le categorie per un articolo particolare ($ link_cat). Sto quindi usando mysql_fetch_array per stampare tutte delle categorie disponibili in un elenco con caselle di controllo. Mentre lo fa, voglio che confronta il valore su cui è attivo, con un valore dell'altro array. Se esiste una corrispondenza, significa che una delle categorie si applica a questo articolo e dovrebbe stampare una riga di codice per applicare l'attributo controllato. grande! tranne che non funziona = [

    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++;
}

Non ho mai fatto un ciclo nidificato prima (sospetto che sia il problema).

Il problema sembra essere che quando questo viene eseguito, $ link_cat [0] che avrà la prima categoria da controllare in esso - non si registra. Viene in bianco. La stampa di variabili all'interno del ciclo for lo ha confermato. Qualsiasi altro [1] [2] ecc. Va bene. È solo [0]. Ma perché? non sembra avere alcun senso. So che c'è qualcosa dentro, perché ho stampato il contenuto dell'array mentre lo riempivo, solo per controllare. Eppure non mostra solo durante il ciclo. Qualche idea?

È stato utile?

Soluzione

leggera correzione di bug (e evidente cambiamento di stile): la tua versione può essere stampata check = " checked " più volte. $ cat e $ cat_id devono essere array?

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>";
}

Per la situazione in cui si dovrebbe normalmente lanciare un debugger a un problema, mi piace inserire un bel print_r in un blocco di commenti (visualizza sorgente per output di debug, più sicuro su siti live-ish).

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

Altri suggerimenti

Sebbene in origine mi sbagliassi sul fatto che il looping dell'array necessitasse di un ripristino, non riesco a scuotere la sensazione che il looping attraverso quell'array non sia il modo più veloce per fare ciò che stai cercando.

Forse array_search lo farebbe, o forse array_key_exists . in_array sembra un vincitore ma non ci ho pensato it

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top