0

我正在修改 Joomla/K2 中的自定义功能,但实际上只涉及 PHP。此功能无法通过任何模块或扩展获得,所以我真的需要弄清楚。

我正在输出 K2 文章并尝试按 K2 中的“额外字段”日期字段进行排序。它作为日期字符串存储在数据库中。我的排序功能有效,因为它改变了项目的顺序 - 但它不能让它们按正确的顺序排列。

function cmp($a, $b){
    global $array;
    return strcmp($array[$a][1], $array[$b][1]);
}


  $limit = 3;
  $limitstart = 0;

  foreach($items as $key=>$item) {

            $extraval = NULL;

            foreach ($item->extra_fields as $extraField){
                if($extraField->value != ''){
                    if($extraField->name == "Start Date"){
                      $extraval = strtotime($extra_field->value);
                    }
                }
            }

            $extrasort[$key] = Array();
            $extrasort[$key][0] = $item;
            $extrasort[$key][1] = $extraval;

          }

          sort($extrasort, 'cmp');

          $rows = Array();
          $total = $limit + $limitstart;

          for($i=$limitstart; $i<$total; $i++) {
            if(!empty($extrasort[$i][0])) {
              $rows[] = $extrasort[$i][0];
            }
          }

目前的输出是:

1381525200
1380834000
1386795600

这显然是不正确的(希望如此)。

任何建议或提示将不胜感激,我已经玩了几个小时了,总的来说我不确定 2D 阵列。

谢谢

4

2 回答 2

0

使用的回调函数sort提供了需要比较的两个值。无需查看全局数组。在这种情况下,$extrasort 中为您提供了两个元素,它们本身就是数组,因此您只需要查看要排序的元素。

您的功能应该(可能)是:

function cmp($a, $b){
 return strcmp($a[1], $b[1]);
}
于 2013-08-29T01:16:49.637 回答
0

感谢您的帮助迈克。我的解决方案是将日期转换为 ISO (YYYY-MM-DD) 格式并使用以下函数进行排序:

function compareasc($v1, $v2) {
       if ($v1[1] == $v2[1]) return 0;
       return ($v1[1] < $v2[1])?-1:1;
}

usort($extrasort, 'compareasc');
于 2013-08-29T11:59:23.550 回答