Вопрос

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

Это было полезно?

Решение

Небольшое исправление ошибки (и вопиющее изменение стиля): ваша версия может распечатать проверил = " проверил " многократно. Должны ли $ 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) . ' -->';

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top