PHP foreach循环通过复选框


PHP foreach loop thru checkboxes

我想遍历所有结果,然后检查从数据库(2个表)中选择的结果。现在它显示所有结果并检查正确的结果,但我的结果是重复的。我能做些什么来解决这个问题?

我现在得到什么

x item1
item1
item1
item2
x item2
item2
item3
item3
x item3
etc...

结果我想要

x item1
x item2
x item3
item4
item5
x item6
etc

使用编码Im

<? foreach($modules as $key => $module): ?>
    <? foreach($selectedmodules as $key => $selected):?>
        <input type="checkbox" name="" value="<?=$module->module_id?>"
        <?=($selected->module_sel_id == $module->module_id ? 'checked="checked"' : '') ?>/><?=$module->module_name?><br />
    <? endforeach; ?>
<? endforeach; ?>

型号(Im使用Codeigniter)

public function getModules()
{   
    $this->db->select('*');
    $this->db->from('module_type a');
    $this->db->join('module b', 'a.type_id = b.type_id');
    return $this->db->get()->result();
}
public function getSelectedModules($id)
{
    $this->db->select('b.module_sel_id');
    $this->db->from('module a');
    $this->db->join('module_select b', 'a.module_id = b.module_sel_id');
    $this->db->where('b.product_id', $id);
    return $this->db->get()->result();
}

这里有一个可以运行的版本,但这不是的最佳方式,您绝对应该考虑找到一种避免内部循环的方法。测试一下是否应该检查它。

<? foreach($modules as $key => $module): ?>
    <? $checked = false; ?>
    <? foreach($selectedmodules as $key => $selected):?>
        <? if($selected->module_sel_id == $module->module_id) $checked = true; ?>
    <? endforeach; ?>
    <input type="checkbox" name="" value="<?=$module->module_id?>"
    <?=($checked ? 'checked="checked"' : '') ?>/><?=$module->module_name?><br />
<? endforeach; ?>

当前的方式是循环遍历所有复选框,然后遍历所有选定的复选框。最好的方法是遍历所有复选框,然后测试是否应该选中它。这里有一些伪代码:

<? foreach($modules as $key => $module): ?>
    <input type="checkbox" name="" value="<?=$module->module_id?>"
    <?=(in_array($module>module_id, $selectedmodules) ? 'checked="checked"' : '') ?>/><?=$module->module_name?><br />
<? endforeach; ?>