0

すべての結果をループしてから、データベースから選択されたもの (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

使用しているコード

<? 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; ?>

モデル(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();
}
4

1 に答える 1

1

これは機能するバージョンです、これは最善の方法ではありません。内部の loop.test を回避する方法を見つけて、チェックする必要があるかどうかを確認することを検討する必要があります。

<? 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; ?>
于 2012-08-27T04:36:35.360 に答える