PHP嵌套循环行为异常
我有一个数组,其中包含特定文章的类别($link_cat)。然后,我使用mysql\u fetch\u数组将可用类别的全部打印到带有复选框的列表中。当它执行此操作时,我希望它将其打开的值与另一个数组中的值进行比较。如果存在匹配项,则表示其中一个类别适用于本文,并且它应该打印出一行代码来应用checked属性。伟大的但它不起作用=[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
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) . ' -->';