smarty中的内部数组排序

时间:2014-05-12 11:39:21

标签: php arrays sorting smarty

test1.php

 <?php
    include ("includes/application_top.inc.php");
     $smarty->assign('user', array(
                                 array('firstname' => 'john',
                                       'lastname' => 'aaa',
                                        'numbers'=>array(21,20,55,44)),
                                 array('firstname' => 'jack',
                                       'lastname' => 'zzz',
                                       'numbers'=>array(23,21,76,34)),
                                array('firstname' => 'jill',
                                      'lastname' => 'ddd',
                                      'numbers'=>array(43,23,54,76)),
                                ));
     $smarty->display('test1.tpl');
    ?>

test1.tpl

<table>
 {foreach item=item key=key from=$user|@sortby:"numbers"} 
 {$item.firstname} <br/>
 {$item.lastname} <br/>
 {$item.numbers} <br/>
 {/foreach}
</table>

问题

我希望结果作为已排序的数字。当我按名字或姓氏进行排序时,它工作正常。但只有数组内的数组有问题。

任何想法如何在smarty中进行内部数组排序。

2 个答案:

答案 0 :(得分:1)

您应该在PHP中进行排序(或者如果您通过查询从数据库中获取正确的顺序数据)。

下面用PHP排序的解决方案:

PHP:

  $arr1 = array(21,20,55,44);
  $arr2 = array(23,21,76,34);
  $arr3 = array(43,23,54,76);
  sort($arr1);
  sort($arr2);
  sort($arr3);
          $smarty->assign('user', array(
                             array('firstname' => 'john',
                                   'lastname' => 'aaa',
                                    'numbers'=> $arr1),
                             array('firstname' => 'jack',
                                   'lastname' => 'zzz',
                                   'numbers'=> $arr2),
                            array('firstname' => 'jill',
                                  'lastname' => 'ddd',
                                  'numbers'=>$arr3),
                                    ));

Smarty的:

<table>
 {foreach item=item key=key from=$user} 
 {$item.firstname} <br/>
 {$item.lastname} <br/>
     {foreach $item.numbers as $number} 
     {$number} 
     {/foreach}
 <br/>
 {/foreach}
</table>

在我看来,在模板引擎中进行复杂操作毫无意义。数据应由PHP准备,Smarty应该只显示它​​们。

答案 1 :(得分:0)

你可能想这样做:

<table>
 {foreach item=item key=key from=$user}
 {$item.firstname} <br/>
 {$item.lastname} <br/>
 {if $item.numbers|@sort eq 1}{/if}
     {foreach $item.numbers as $number}
     {$number},
     {/foreach} <br/>
 {/foreach}
</table>

解释如果: 如果你执行{$item.numbers|@sort},它将回显1,因为这是sort的输出。但是如果你将它放在if中,输出就不会显示在页面上,但是会运行该函数。

sortby是一个插件,它的工作方式与您想要使用的不同。