Frage

Ich habe ein Array, das die Kategorien für einen bestimmten Artikel enthält ($ link_cat). Ich bin dann mysql_fetch_array mit auszudrucken alle der Kategorien in eine Liste zur Verfügung mit Kontrollkästchen. Während es dies tut, will ich es den Wert es auf, auf einen Wert von dem anderen Array zu vergleichen. Wenn es eine Übereinstimmung gibt, dann bedeutet es, dass eine der Kategorien zu diesem Artikel gilt, und es sollte eine Zeile Code das Attribut checked anzuwenden auszudrucken. groß! außer es ist nicht = Arbeits [

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

Ich habe nie wirklich eine verschachtelte Schleife gemacht, bevor (I, das ist das Problem vermuten).

Das Problem scheint zu sein, dass, wenn diese ausgeführt wird, $ link_cat [0], die die erste Kategorie in ihm zu überprüfen gegen hat - nicht registriert. Es kommt leer. Ausdrucken von Variablen innerhalb der for-Schleife dies bestätigt. Jegliche andere [1] [2] usw., sind in Ordnung. Es ist nur [0]. Aber wieso? es scheint keinen Sinn zu machen. Ich weiß, es ist etwas drin, weil ich den Inhalt des Arrays gedruckt, wie ich es ihm gefüllt, nur um zu überprüfen. Doch es funktioniert einfach nicht in der Schleife zeigen. Irgendwelche Ideen?

War es hilfreich?

Lösung

leichte Bug-Fix (und eklatante Stil ändern): Ihre Version geprüft ausdrucken können = "checked" mehrere Male. Sie $cat und $cat_id müssen Arrays sein?

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

Für Situation, wo man in der Regel einen Debugger zu einem Problem werfen würde, wie ich in einem schönen print_r in einem Kommentarblock (view-source für Debug-Ausgabe, sicherer auf Live-ish-Site).

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

Andere Tipps

Während ich ursprünglich sehr falsch über die Array war Looping einen Reset benötigt, kann ich das Gefühl nicht los, dass durch diese Anordnung Looping ist nicht der schnellste Weg zu tun, was Sie nach.

Vielleicht array_search tun würde, oder vielleicht array_key_exists . in_array wie ein Sieger aussehen, aber ich dachte nicht an es

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top