2012-08-27 146 views
0

我想通過所有結果循環,然後檢查從數據庫中選擇(2表)。現在它顯示所有結果並檢查正確的結果,但我的結果是重複的。我能做些什麼來解決這個問題?PHP foreach循環通過複選框

什麼IM現在越來越

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

型號

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(); 
} 
+0

有什麼破? – Ibu

+2

爲什麼你放兩個循環?您編寫的代碼不足以診斷問題 – WatsMyName

+1

請解釋「重複結果」部分。然後顯示數據庫中的數據示例,最後顯示查詢本身。 –

回答

1

這裏有一個版本,將工作,但它的不是最好的方式,你一定要考慮找到一種方法來避免內部循環。測試看看是否應該檢查。

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

你是關於你的第一個版本,工作。我試着第二個,in_array去工作,如果我使用對象? – dynamo

+1

@dynamo,看看你剛剛發佈的代碼,我認爲最好是結合你的查詢(如果可能的話,我不熟悉CodeIgniter),所以你在第一個循環中有可用的信息。另外,出於性能方面的原因,當您只需要幾個表時,最好不要使用通配符「*」來選擇表中的列。這會導致服務器必須返回所有列的**,而不僅僅是您需要的列。 – 0b10011

+0

是的我意識到通配符我通常只是這樣做,直到我弄清楚我需要什麼。我也知道人們討厭php速記。所以基本上我應該嘗試做一個子查詢來獲得選擇的選項? – dynamo