我需要用smarty对数组进行排序。我尝试使用this code:
我的预告:
{foreach $hooks->addblock as $addblock}
<ul>
{foreach $addblock|@sortby:"prio" as $value}
{$value@key}: {$value}
{/foreach}
</ul>
{/foreach}
$hooks->addblock
的var_dump:
array(5) {
["filed_1"]=>
array(5) {
["id"]=>
string(7) "filed_1"
["title"]=>
string(6) "filed1"
["field"]=>
string(20) "This is test filed 1"
["size"]=>
int(740)
["prio"]=>
int(7)
}
["filed_2"]=>
array(5) {
["id"]=>
string(7) "filed_2"
["title"]=>
string(6) "filed2"
["field"]=>
string(20) "This is test filed 2"
["size"]=>
int(740)
["prio"]=>
int(6)
}
所以,我希望按值prio
(num)升序对数组进行排序,但它没有正确显示!
结果如下:
我希望第一行“field_2”。但我找不到解决方案。
这是修饰符(modifier.sortby.php):http://www.smarty.net/forums/viewtopic.php?p=23628#23628 我也有一个反复出现的错误:
[11月24日星期六20:04:52] [错误] [客户端127.0.0.1] PHP通知: 未初始化的字符串偏移量:0英寸 /var/www/libs/plugins/modifier.sortby.php(33):运行时创建 第1行的功能
答案 0 :(得分:3)
PHP注意:未初始化的字符串偏移量:/var/www/libs/plugins/modifier.sortby.php(33)中的0:第1行的运行时创建函数
这提供了 sortby 修饰符如何工作的线索。
您链接的文档说:
' - '允许您按相反的顺序排序,#允许您按数字排序而不是字符串(您也可以使用' - #age'以相反的顺序进行数字排序)
您的prio
字段是一个整数,虽然在PHP中您可以跨整数和字符串透明地执行许多操作,但通知表明 sortby 通过单独访问每个字符来实现字符串排序。这不可能使用整数。
因此,您应该使用#
修饰符:
{foreach $addblock|@sortby:"#prio" as $value}
^
答案 1 :(得分:0)
不要这样做。排序不是模板引擎应该执行的任务。这显然是业务逻辑,需要进入控制器。