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中进行内部数组排序。
答案 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是一个插件,它的工作方式与您想要使用的不同。