PHP вложенный цикл ведет себя неожиданно - PullRequest
0 голосов
/ 10 марта 2009

У меня есть массив, который содержит категории для конкретной статьи ($ link_cat). Затем я использую mysql_fetch_array, чтобы распечатать все категорий, доступных в списке с флажками. Пока он делает это, я хочу сравнить его значение со значением из другого массива. Если есть совпадение, то это означает, что к этой статье относится одна из категорий, и она должна распечатать строку кода, чтобы применить проверенный атрибут. отличный! кроме того, что это не работает = [

    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]. Но почему? это не имеет никакого смысла. Я знаю, что там что-то есть, потому что я напечатал содержимое массива, когда я его заполнил, просто чтобы проверить. Тем не менее, это не просто показать во время цикла. Есть идеи?

Ответы [ 2 ]

9 голосов
/ 11 марта 2009

Небольшое исправление ошибки (и вопиющее изменение стиля): Ваша версия может распечатывать проверил = "проверил" несколько раз. $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 в блок комментария (view-source для вывода отладки, более безопасный на live-ish сайтах).

echo '<!-- ' . print_r($link_cat, TRUE) . ' -->';
0 голосов
/ 11 марта 2009

Хотя я изначально был очень неправ в отношении циклического массива, требующего сброса, я не могу избавиться от ощущения, что циклический просмотр этого массива - не самый быстрый способ сделать то, что вам нужно.

Возможно, array_search подойдет, или, может быть, array_key_exists . in_array выглядит как победитель, но я не думал об этом

...