Pergunta

Eu tenho uma matriz que contém as categorias para um artigo específico ($ link_cat). Estou em seguida, usando mysql_fetch_array para imprimir todas das categorias disponíveis em uma lista com caixas de seleção. Enquanto ele está fazendo isso, eu quero isso para comparar o valor é de, para um valor do outro array. Se houver uma correspondência, então isso significa que uma das categorias se aplica a este artigo, e que deve imprimir uma linha de código para aplicar o atributo marcada. ótimo! Exceto ele não está funcionando = [

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

Eu nunca realmente fez um loop aninhado antes (Eu suspeito que isso é o problema).

O problema parece ser que, quando este é executado, $ link_cat [0] que terá a primeira categoria para verificar contra nela - não registrar. Ele vem em branco. Imprimir variáveis ??dentro do loop for confirmado. Quaisquer outros [1] [2] etc, são muito bem. É apenas [0]. Mas por que? não parece fazer qualquer sentido. Eu sei que há algo lá dentro, porque eu impresso o conteúdo do array como eu encheu-lo, apenas para verificar. No entanto, não apenas mostrar durante o loop. Alguma idéia?

Foi útil?

Solução

ligeira correção de bug (e mudança de estilo flagrante): Sua versão pode imprimir checked = "checked" várias vezes. Fazer $cat e $cat_id necessidade de ser matrizes?

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

Para a situação em que seria normalmente lançar um depurador em um problema, eu gosto de jogar em um agradável print_r em um bloco de comentário (view-fonte para a saída de depuração, mais seguro em sites de live-ish).

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

Outras dicas

Enquanto eu estava originalmente muito errado sobre a matriz looping precisando de um reset, não posso afastar a sensação de que loop através dessa matriz não é a maneira mais rápida de fazer o que você está depois.

array_search faria, ou talvez array_key_exists . in_array olhar como um vencedor, mas eu não acho que de it

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top