0

特定の記事 ($link_cat) のカテゴリを含む配列があります。次に、mysql_fetch_array を使用して、利用可能なすべてのカテゴリをチェックボックス付きのリストに出力しています。これを行っている間、それがオンになっている値を他の配列の値と比較したいと思います。一致する場合は、カテゴリの 1 つがこの記事に適用されることを意味し、checked 属性を適用するコード行を出力する必要があります。すごい!それが機能していないことを除いて =[

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

私は以前にネストされたループを実際に行ったことはありません(それが問題だと思います)。

問題は、これが実行されると、チェックする最初のカテゴリを持つ $link_cat[0] が登録されないことです。空白になります。for ループ内の変数を出力すると、これが確認されました。その他の [1] [2] などは問題ありません。[0]だけです。しかし、なぜ?意味がないようです。確認のために、入力した配列の内容を印刷したので、そこに何かがあることはわかっています。しかし、それはループ中に表示されるだけではありません。何か案は?

4

2 に答える 2

9

わずかなバグ修正 (およびあからさまなスタイルの変更): お使いのバージョンでは、checked="checked" が複数回出力される可能性があります。配列である必要があります$catか?$cat_id

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

通常は問題が発生したときにデバッガーをスローする状況では、コメント ブロックに適切なprint_rをスローするのが好きです(デバッグ出力のソースを表示し、ライブっぽいサイトではより安全です)。

echo '<!-- ' . print_r($link_cat, TRUE) . ' -->';
于 2009-03-10T21:07:32.370 に答える
0

リセットが必要な配列のループについては、もともと私は非常に間違っていましたが、その配列をループすることが、目的を達成するための最速の方法ではないという感覚を揺るがすことはできません。

おそらくarray_searchか、あるいは array_key_exists でしょin_arrayは勝者のように見えますが、私はそれを考えていませんでした

于 2009-03-10T21:02:28.360 に答える