ThinkPHP 模板引擎的 volist 標簽支援巢狀遍歷,配合控制器傳遞的多維陣列,輕鬆實現「分組 → 明細」的雙層列表渲染(如藥品分類 → 具體藥品)。
$drug = array(
'ACEI' => array(
array('ch_name'=>'', 'en_name'=>'captopril'),
array('ch_name'=>'腳本下載', 'en_name'=>'enalapril'),
array('ch_name'=>'賴諾普利', 'en_name'=>'lisinopril')
),
'ARB' => array(
array('ch_name'=>'腳本源碼', 'en_name'=>'eprosartan'),
array('ch_name'=>'jb51', 'en_name'=>'candesartan'),
array('ch_name'=>'PHP學習', 'en_name'=>'losartan'),
array('ch_name'=>'JS學習', 'en_name'=>'valsartan'),
array('ch_name'=>'腳本教程', 'en_name'=>'irbesartan')
)
);
$this->assign('drugs', $drug);
<foreach name="drugs" item="vo" key="k">
<label class="checkbox">
<input type="checkbox" name="{$k}" value="1">{$k}
</label>
<foreach name="vo" item="drug">
<label class="checkbox inline drug">
<input type="checkbox" name="{$drug.en_name}" value="1">{$drug.ch_name}
</label>
</foreach>
</foreach>
key="k" 獲取分組鍵名(ACEI、ARB)vo(該分組下的藥品陣列),item="drug" 重命名單元變量{$drug.en_name}、{$drug.ch_name} 訪問子陣列鍵值name 屬性各不相同,表單提交時可直接識別選中項☐ ACEI
☐ captopril
☐ enalapril
☐ lisinopril
☐ ARB
☐ eprosartan
☐ candesartan
☐ losartan
☐ valsartan
☐ irbesartan
同理再套一層 <foreach name="sub" item="item">,注意變量名不衝突即可。
掌握雙層 volist,配合控制器合理構建樹形/分組數據,即可在模板層零邏輯實現複雜結構化輸出。