PHP嵌套循环行为异常

PHP嵌套循环行为异常,php,mysql,loops,nested-loops,Php,Mysql,Loops,Nested Loops,我有一个数组,其中包含特定文章的类别($link_cat)。然后,我使用mysql\u fetch\u数组将可用类别的全部打印到带有复选框的列表中。当它执行此操作时,我希望它将其打开的值与另一个数组中的值进行比较。如果存在匹配项,则表示其中一个类别适用于本文,并且它应该打印出一行代码来应用checked属性。伟大的但它不起作用=[ while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ){ $cat[$i] = $ro

我有一个数组,其中包含特定文章的类别($link_cat)。然后,我使用mysql\u fetch\u数组将可用类别的全部打印到带有复选框的列表中。当它执行此操作时,我希望它将其打开的值与另一个数组中的值进行比较。如果存在匹配项,则表示其中一个类别适用于本文,并且它应该打印出一行代码来应用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++;
}
while($row=mysqli\u fetch\u数组($results,mysqli\u ASSOC)){
$cat[$i]=$row['category'];
$cat_id[$i]=$row['cat_id'];
回显“
  • ”.$cat[$i]。
  • ”; $i++; }
    我以前从未真正做过嵌套循环(我想这就是问题所在)


    问题似乎是,运行时,$link_cat[0]没有注册,它将有第一个要检查的类别。它显示为空。在for循环中打印变量证实了这一点。任何其他[1][2]等都可以。它只是[0].但为什么?这似乎没有任何意义。我知道里面有一些东西,因为我在填充数组时打印了数组的内容,只是为了检查。但它不只是在循环过程中显示。有什么想法吗?

    当我最初对数组循环需要重置的想法非常错误时,我无法动摇通过数组循环的感觉这不是你追求的最快的方式

    也许可以,或者可能。看起来像个赢家,但我没想到它会有轻微的错误修复(和明显的风格变化):你的版本可以打印多次checked=“checked”。是否需要使用数组

    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>";
    }
    
    while($row=mysqli\u fetch\u数组($results,mysqli\u ASSOC)){
    $cat=$row['category'];
    $cat_id=$row['cat_id'];
    
    echo'
  • 您能显示填充$link_cat的代码吗?同意,这似乎更可能是问题所在。您是否在进入while循环之前将$i初始化为零?1)您能显示while()循环中至少一行的var_dump($row)显示的内容吗?2)$i未初始化。可能是问题。3)for()循环是非常无效的。在找到匹配的类别后,至少应该在if()中有一个break;语句!4)另外,除非你是作为某个学校项目的一部分来做,否则我敢打赌,使用一些自动处理这一级别内容的框架会更有意义。他正在通过索引进行访问,reset()是不必要的。我明白了。我将删除我回答中的愚蠢部分。谢谢朋友,非常感谢。你的方式好多了,我正在学习:)
    echo '<!-- ' . print_r($link_cat, TRUE) . ' -->';