首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 模板中多維數組遍歷:雙層 volist 實現分組數據輸出

     編輯:PHP 綜合知識

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

模板雙層 volist

<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,配合控制器合理構建樹形/分組數據,即可在模板層零邏輯實現複雜結構化輸出。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved