MW211 EXIT

devlog
PHP/キーブレイク(グループ数)
2022年09月09日
tableタグでrowspanしたい場合、先頭行にて以降で結合する行を
あらかじめ把握しておく必要がある。

これをPHP上であらかじめ算出しておく方法。
┌──────────────────────────────────────┐
│$添字 = 0;                                                                  │
│while ($添字 < count($配列)) {                                              │
│    $old添字1 = $添字;                                                      │
│    $配列[$old添字1]['行数1'] = 0;                                          │
│    do {                                                                    │
│        $old添字2 = $添字;                                                  │
│        $配列[$old添字2]['行数2'] = 0;                                      │
│        do {                                                                │
│            $配列[$添字]['行数1'] = 0;                                      │
│            $配列[$添字]['行数2'] = 0;                                      │
│            $配列[$old添字1]['行数1']++;                                    │
│            $配列[$old添字2]['行数2']++;                                    │
│            $添字++;                                                        │
│        } while (($添字 < count($配列))                                     │
│              && ($配列[$添字]['キー1'] == $配列[$old添字1]['キー1'])       │
│              && ($配列[$添字]['キー2'] == $配列[$old添字2]['キー2']));     │
│    } while (($添字 < count($配列))                                         │
│          && ($配列[$添字]['キー1'] == $配列[$old添字1]['キー1']));         │
│}                                                                           │
└──────────────────────────────────────┘

これを元にSmartyでは以下のように出力する。
┌──────────────────────────────────────┐
│<table>                                                                     │
│{foreach from=$配列 key=no item=i}                                          │
│  <tr>                                                                      │
│{if $i['行数1'] > 0}                                                        │
│    <td rowspan="{$i['行数1']|escape}">{$i['キー1']|escape}</td>            │
│{/if}                                                                       │
│{if $i['行数2'] > 0}                                                        │
│    <td rowspan="{$i['行数2']|escape}">{$i['キー2']|escape}</td>            │
│{/if}                                                                       │
│    <td>{$i['バリュー']|escape}</td>                                        │
│  </tr>                                                                     │
│{/foreach}                                                                  │
│</table>                                                                    │
└──────────────────────────────────────┘
分類:PHP