PHP双层foreach循环导致复选框重复输出问题求助
问题原因
你使用双层foreach循环时,每遍历一个$test1的元素,就会完整遍历一遍$test2,导致每个复选框被输出count($test2)次(此处为3次),这就是重复输出的根源。
解决方案
只需遍历$test1一次,用in_array()函数判断当前元素是否存在于$test2中,以此决定是否添加checked属性:
<?php $test1 = array('a','b','c','d','e','f','g'); $test2 = array('a','c','g'); foreach($test1 as $a1) { $checked = in_array($a1, $test2) ? 'checked="checked"' : ''; // 修正id重复问题,给每个复选框设置唯一id echo "<input type='checkbox' id='keyword_{$a1}' {$checked} name='keyword[]' value='{$a1}'> {$a1}<br/>"; } ?>
额外注意事项
- 原代码中所有复选框的
id均为keyword,违反HTML规范(id必须唯一),因此改为keyword_{$a1}确保每个复选框id唯一。 - 原代码else分支的
name属性是keyword,会导致表单提交时仅最后一个未选中的元素被提交,统一改为keyword[]才能将所有选中项以数组形式提交。
内容的提问来源于stack exchange,提问作者Juju1008
相关产品推荐
相关产品推荐

