ループネスト
$obj->arr = array(array('var1' => 'a', 'var2' => 'b'), array('var1' => 'aa', 'var2' => 'bb', 'nest' => array(array('nest1' => 'nestA', 'nest2' => 'nestB', 'var2' => 'nestC'), array('nest1' => 'nestAA', 'nest2' => 'nestBB', 'var3' => 'nestCC'))), array('var3' => 'cc'), array('nest' => array(array('var1' => 'nestAAA'))) ); $obj->var3 = 'test';
HTMLテンプレート
{var3} (上位階層)<br> <table border> <tr> <th>var1</th><th>var2</th><th>var3</th><th>nest</th> </tr> {loop:arr} <tr> <td>{var1}</td><td>{var2}</td><td>{var3}</td> <td> {loop:nest} nest1={nest1} nest2={nest2} var1={var1} var2={var2} var3={var3}<br> {endloop:} </td> </tr> {endloop:} </table> {var3} (loop中に書き換えた変数が元に戻っているかどうか)
表示
test (上位階層)
var1 | var2 | var3 | nest |
---|---|---|---|
a | b | test | |
aa | bb | test |
nest1=nestA nest2=nestB var1=aa var2=nestC var3=test nest1=nestAA nest2=nestBB var1=aa var2=bb var3=nestCC |
cc | |||
test |
nest1= nest2= var1=nestAAA var2= var3=test |
完成!したかも。
単純に考えてそれぞれforeach文1回分、つまり2倍の時間がかかってしまうわけだけれど、HTMLにforeachとかいうプログラムが入り込まなくて自分が使うには(テンプレートの書き方説明するには)良い感じになった。
やったことと言えば
- Compiler/Flexy.php に toStringLoop関数とtoStringEndLoop関数の追加
- Tokenizer.lex から{loop:{FLEXY_VAR}}と{endloop:}を認識するようにしたTokenizer.phpの生成
- Token/Loop.php と Token/EndLoop.php の作成
です。
他に使う人が居るかどうかは謎だけれどもしばらく使って問題がなければどこかにアップしよう。
(PHPライセンスって確か改造後の公開もいいんだよね…)