用smarty对数组进行排序

时间:2012-11-24 19:20:17

标签: php smarty

我需要用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)升序对数组进行排序,但它没有正确显示!
结果如下:
Output smarty

我希望第一行“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行的功能

2 个答案:

答案 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)

不要这样做。排序不是模板引擎应该执行的任务。这显然是业务逻辑,需要进入控制器。