如何在SilverStripe 3.1中按字母顺序排序(但大写字母不是小写之前的组)?

时间:2015-09-02 07:37:59

标签: php mysql sorting silverstripe

在SilverStripe 3.1中,我可以通过执行以下操作获得Children的排序列表:

$this->Children()->sort('Title', 'ASC');

但是当我这样做时,大写字母(作为一个组)出现在小写字母之前(作为一个组);因此" D"来自" a":

  

Aadb
  Bdbdd
  CDBD
  Dbddb
  AEB

但是我想要这样的排序顺序:

  

Aadb
  AEB
  Bdbdd
  CDBD
  Dbddb

如何在SilverStripe中执行此操作?

修改

我发现了一个类似question的地方,威尔说:

  

奇怪!我原本以为它会不区分大小写。您只需将数组列表导出为数组($ list-> map()),然后编写自己的排序逻辑。

有谁知道怎么做?

我尝试过以下操作,但不会返回任何结果:

function SortedChildren(){
    $sortChildren = $this->Children()->map();
    natcasesort($sortChildren);
    return $sortChildren;
}

1 个答案:

答案 0 :(得分:0)

好的,最后我想出了如何编写和使用我自己的排序逻辑:

function SortChildren() {

     $_list = $this->Children()->map("URLSegment", "Title");
     natcasesort($_list);

     $sortedChildren = new ArrayList();
     foreach($_list as $key => $value ){
         $fields = new ArrayData(array('ChildURL' => $key, 'Title' => $value));
         $sortedChildren->push($fields);
     }  
     return $sortedChildren;

}

然后在模板中使用:

<% loop SortChildren %>
      <div class="child"><a href="$ChildURL">$Title</a></div>
<% end_loop %>