我有一个数组,其中包含特定文章的类别($ link_cat)。然后我使用mysql_fetch_array打印出带有复选框的列表中可用类别的所有。虽然它正在这样做,我希望它将它的值与另一个数组的值进行比较。如果匹配,则表示其中一个类别适用于本文,并且应该打印出一行代码以应用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++;
}

我以前从未真正做过嵌套循环(我怀疑这是问题)。

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

有帮助吗?

解决方案

轻微错误修复(以及明显的样式更改):您的版本可以打印出check =&quot; checked&quot;多次。 $ 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 (调试输出的视图源,在live-ish站点上更安全)。

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

其他提示

虽然我最初对需要重置的数组循环非常不对,但我不能感觉到循环遍历该数组不是最快的方式来完成你所追求的事情。

也许 array_search 会做,或者 array_key_exists in_array 看起来像赢家,但我没想到它

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top