LoginSignup
0
0

More than 5 years have passed since last update.

smartyで連想配列を条件分岐したはなし

Posted at

テンプレート上の条件分岐によって、文言を変更

条件分岐に使用するつもりのユーザの情報は連想配列内にあるので、配列内にあった場合に処理を変えようとした。

まず試したこと

{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関数は同次元でないと使用できない。

今後の課題

  • ループで回していくのはいいが、その場合の処理にかかる時間や、データ量が多い時のメモリの扱いなども考えられるようになる。
  • どのような関数があるか、基本的な動きについて把握しておく。機能の辺りが付けられると捗る。
  • プログラミングの基本的な考え方や作法を知る。というよりも知りたい!
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0