【发布时间】:2014-06-25 20:05:16
【问题描述】:
我在数据库中有一个列(应用程序),其中有一个用逗号分隔的单词列表,例如 - AAA、BBB、CCC 我还有另一列 (appsSelected) 将以相同的格式填充用户使用复选框值选中的单词。
在一个页面上,我列出了应用程序中的所有单词,旁边有复选框,在提交时它会将选中的单词插入到 appsSelected 中。 在另一个页面上,它只列出了 appsSelected 列中的单词,我设法抓取了 appsSelected 并将其分解以列出每个单词。
<?php
$appsString = $pi_row['appsSelected'];
// break $appsString using the comma as the delimiter
$appliances = explode(', ', $appsString);
// loop through and print all the words
echo '<ul>';
for ($i = 0; $i < count($appliances); $i++)
{
echo '<li>' . $appliances[$i] . '</li><br/>';
}
echo '</ul>';
?>
我遇到的问题是,当我返回带有复选框的页面时,我希望它们在 appsSelected 中的单词上保持选中状态。 所以我猜我必须将应用程序与 appSelected 进行比较,并根据匹配的单词来回显选中或未选中的复选框。
for ($i = 0; $i < count($appliances); $i++)
{
$codes = array($pi_row['apps']);
$codesSelected = array($pi_row['appsSelected']);
//if (in_array($appliances[$i], $codesSelected)) {
if (array_intersect($ap, $aps)) {
echo '<li><input type="checkbox" checked="checked" value="' . $appliances[$i] . '" name="applianceCheckbox[]">' . $appliances[$i] . '</input></li><br/>';
} else{
echo '<li><input type="checkbox" value="' . $appliances[$i] . '" name="applianceCheckbox[]">' . $appliances[$i] . '</input></li><br/>';
}
}
上面的代码只有在 appsSelected 匹配应用程序中的整个数组时才有效: 例如在应用程序栏中 - AAA、BBB、CCC 如果我勾选 AAA 和 BBB 或任何其他不涉及匹配应用程序中每个单词的组合,则不会勾选任何复选框,但如果我勾选 AAA、BBB、CCC,则复选框将返回所有勾选
我需要找到一种方法来查看应用程序中的任何单词是否与 appSelected 中的任何单词匹配。
【问题讨论】:
-
但它们被称为 applianceCheckbox[]。它们不应该是 applianceCheckbox[][$i] 或类似的东西吗?
-
使用
in_array就像你注释掉的那样,只是不要忘记使用explode(', ', $pi_row['appsSelected'])创建数组,就像你在第一篇文章中所做的那样,你应该没问题。 -
非常感谢! @ccKep 当我爆炸它时它起作用了。
标签: php mysql arrays checkbox checked