【发布时间】:2016-08-04 08:29:42
【问题描述】:
我必须做一个排名功能。
在我的 $passages 数组中,我有 'user'、'username'、'note' 和 'classement' 键。
我想设置 'classement' 键以按 'note' 键排名并按 'username' 键排序数组。
这是我尝试过的:
for ($i = 0; $i < sizeof($passages); $i++) {
for ($j = 0; $j < sizeof($passages); $j++) {
$test = $this->compare($passages[$i]['note'], $passages[$j]['note']);
if ($test < 0) {
$tmp = $passages[$j];
$passages[$j] = $passages[$i];
$passages[$i] = $tmp;
} else if ($test >= 0) {
$tmp = $passages[$i];
$passages[$i] = $passages[$j];
$passages[$j] = $tmp;
}
}
}
比较函数:
if ($a==$b) return 0;
return ($a<$b)?-1:1;
在这个排名功能中,我添加了一个处理关系的功能:
$rank = 1;
for ($i = 0; $i < $nbTotal; $i++) {
// Si la note du passage actuel est égale à la note du passage précédent,
// le classement est égal au classement du passage précédent
if ($i > 0 && $passages[$i]['note'] == $passages[$i - 1]['note']) {
$passages[$i]['classement'] = $passages[$i - 1]['classement'];
}
// Sinon le classement est égal à la valeur de $rank
else {
$passages[$i]['classement'] = $rank;
}
$rank++;
}
我测试了我的函数,它返回了一个按用户 ID 排序且“分类”键 = 用户 ID 顺序的数组。
我得到了什么:
$passages = array(
array(['id'] => "1"
['username'] => "1124",
['note'] => "22",
['classement'] => "1"),
array(['id'] => "2",
['username'] => "1001",
['note'] => "10",
['classement'] => "2"),
array(['id'] => "3",
['username'] => "1100",
['note'] => "15",
['classement'] => "3"),
array(['id'] => "4",
['username'] => "1120",
['note'] => "5",
['classement'] => "4"),
array(['id'] => "5",
['username'] => "1200",
['note'] => "15",
['classement'] => "5")
);
我想要什么:
$passages = array(
array(['id'] => "2"
['username'] => "1001",
['note'] => "10",
['classement'] => "4"),
array(['id'] => "3",
['username'] => "1100",
['note'] => "15",
['classement'] => "2"),
array(['id'] => "4",
['username'] => "1120",
['note'] => "5",
['classement'] => "5")
array(['id'] => "1",
['username'] => "1124",
['note'] => "22",
['classement'] => "1"),
array(['id'] => "5",
['username'] => "1200",
['note'] => "15",
['classement'] => "2")
);
【问题讨论】:
标签: php arrays sorting symfony ranking