我知道我们可以使用以下内容随机对DataList
进行排序:
$example = Example::get()->sort('RAND()');
但是当我尝试随机排序ArrayList
时,它不起作用。我可以按ArrayList
排序ID DESC
,但RAND()
不能排序。
有没有办法让ArrayList
随机对其项目进行排序?
示例:
public function AllTheKits() {
$kits = Versioned::get_by_stage('KitsPage', 'Live');
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
在页面中:
public function getKitsRandom() {
return $this->AllTheKits()->sort('RAND()');
}
这在<% loop KitsRandom %>
答案 0 :(得分:4)
不是真的。这是我能提出的最好的解决方法:
foreach($myArrayList as $item) {
$item->__Sort = mt_rand();
}
$myArrayList = $myArrayList->sort('__Sort');
答案 1 :(得分:3)
您可以在循环前对DataList
进行随机排序,而不是尝试对ArrayList
进行随机排序:
public function AllTheKits($sort = '') {
$kits = Versioned::get_by_stage('KitsPage', 'Live', '', $sort);
$kitsArrayList = ArrayList::create();
foreach ($kits as $kit) {
if ($kit->MemberID == Member::currentUserID()) {
$kitsArrayList->push($kit);
}
}
return $kitsArrayList;
}
public function getKitsRandom() {
return $this->AllTheKits('RAND()'));
}
作为旁注,您可以过滤原始DataList,以便在KitsPages
调用中获取与此MemberID
相关的Versioned::get_by_stage
:
public function AllTheKits($sort = '') {
$kits = Versioned::get_by_stage(
'KitsPage',
'Live',
'MemberID = ' . Member::currentUserID(),
$sort
);
$kitsArrayList = ArrayList::create($kits);
return $kitsArrayList;
}
您也可以这样做:
return KitsPage::get()->filter('MemberID', Member::currentUserID())->sort('RAND()');
当您查看实际网站时,这只会获得实时KitPages
。