テンプレート上の条件分岐によって、文言を変更
条件分岐に使用するつもりのユーザの情報は連想配列内にあるので、配列内にあった場合に処理を変えようとした。
まず試したこと
{if 'hoge'|in_array:$value}
true
{else}
false
{/if}
これで配列$value内にhogeが存在した場合にtrueが表示されると考えたところ、表示されたのはfalseでした。
原因を確認
配列の構造を確認してみる
array(3) {
[0]=>
array(2) {
[id]=>
int(2)
[item]=>
string(4) "hoge"
}
[1]=>
array(2) {
[id]=>
int(1)
[item]=>
string(4) "fuga"
}
[2]=>
array(2) {
[id]=>
int(2)
[item]=>
string(8) "fugafuga"
}
}
どうも in_arrayは配列の次元が異なる条件には対応していないという事なので、別の方法を考える。
対応策
{foreach $arr as $value}
{if $value.item == 'hoge'}
true
{else}
false
{/if}
{/foreach}
もっとすっきりとした方法があるはずですが思いつかなったので、今回はこの処理で実装しました。
まとめ
- 配列を一つずつ処理したい場合は、ループさせることができないか考える。
- in_array関数は同次元でないと使用できない。
今後の課題
- ループで回していくのはいいが、その場合の処理にかかる時間や、データ量が多い時のメモリの扱いなども考えられるようになる。
- どのような関数があるか、基本的な動きについて把握しておく。機能の辺りが付けられると捗る。
- プログラミングの基本的な考え方や作法を知る。というよりも知りたい!