使用smarty比较多维数组值

时间:2013-02-02 01:08:10

标签: php smarty

我有多维数组。

 Array (4)
0 => Array (6)
  0 => 0
  1 => "100100105"
  2 => "honey"
  3 => "SUP"
  4 => 0
  5 => 0
1 => Array (6)
  0 => 1
  1 => "100100608"
  2 => "bunny"
  3 => "MEM"
  4 => 0
  5 => 0
2 => Array (6)
  0 => 1
  1 => "100100609"
  2 => "munny"
  3 => "DISTSTD"
  4 => 0
  5 => 0
3 => Array (6)
  0 => 2
  1 => "100300054"
  2 => "sunny"
  3 => "MEM"
  4 => 0
  5 => 0

想要使用smarty将当前的零级值与下一级零值(如Array [0] [0] == Array [1] [0])进行比较。

我只能获得当前元素值。如何在当前循环中获取下一个元素值

  {{foreach from=$volume item=element}}
      {{if $element@iteration > 1}}
            {{$element[0]}}
          {{/if}}
  {{/foreach}}

1 个答案:

答案 0 :(得分:1)

要访问Smarty中的数组,您需要分配要访问变量的索引,以便能够索引到数组中

{foreach from=$volume item=element name=foo}
  {assign var=nextIteration value=$smarty.foreach.foo.iteration + 1}
  {$volume[$nextIteration]}
{/foreach}

我想做你要做的比较:

  {foreach from=$volume item=element name=foo}
      {assign var=nextIteration value=$smarty.foreach.foo.iteration + 1}

      {if ($nextIteration + 1) >= count($volume) }
          Last element
      {elseif $volume[$nextIteration][0] == $element[0]}
          They matched!
      {else} 
          They are different!
      {/if}
  {/foreach}

然而,这是使用Smarty的一种非常糟糕的方式,因为它以一种非常丑陋的方式打破了MVC模式。只需编写一个Smarty plugin来处理这样的复杂情况,你会好得多。是的,它可能仍然会打破MVC模式,但它至少是可维护的,而不是在模板中包含复杂的代码。