在一定条件下用PHP进行排序
我有几个学生在php数组中的分数 $firstarray:在一定条件下用PHP进行排序,php,arrays,sorting,ranking,Php,Arrays,Sorting,Ranking,我有几个学生在php数组中的分数 $firstarray: Array ( [0] => Array ( [6] => Array ( //I want to skip this student from ranking [ENGLISH] => 45.00 [MATHEMATICS] => 5.00
Array (
[0] => Array (
[6] => Array ( //I want to skip this student from ranking
[ENGLISH] => 45.00
[MATHEMATICS] => 5.00
[SCIENCE] => 40.00
)
)
[1] => Array (
[7] => Array (
[ENGLISH] => 41.00
[MATHEMATICS] => 40.00
[SCIENCE] => 47.00
)
)
)
[2] => Array (
[8] => Array (
[ENGLISH] => 42.00
[MATHEMATICS] => 44.00
[SCIENCE] => 40.00
)
)
[3] => Array (
[9] => Array (
[ENGLISH] => 42.00
[MATHEMATICS] => 25.00
[SCIENCE] => 31.00
)
)
)
在另一个数组中,我有每个学生在排名中的总分:
$secondarray:
Array ( [7] =>
Array (
[score] => 128
[rank] => 1
)
[8] =>
Array (
[score] => 126
[rank] => 2
)
[9] =>
Array (
[score] => 98
[rank] => 3
)
[6] =>
Array (
[score] => 90
[rank] => 4
)
)
在扣除学生在所有科目中的总分后,我使用以下php代码计算排名:
$totalmarkscore:
Array (
[0] => Array (
[6] => 90
)
[1] => Array (
[7] => 128
)
[2] => Array (
[8] => 126
)
[3] => Array (
[9] => 98
)
)
$rankchu =array();
foreach($totalmarkscore as $k => $vl){
if(is_array($vl)){
foreach($vl as $hlutna =>$ken){
$rankchu[$hlutna]= $ken;
}
}
}
$secondarray = setRankings($rankchu);
我的问题是:如果一个学生没有在每门学科中获得至少15分,我如何跳过计算他的排名?但是我仍然想展示学生分数的评分细节,我只想从排名中跳过它,然后维持排名顺序。在上面的例子中,我想跳过id=6的学生,因为他没有从排名计算中得到数学方面的最低15分(他只得到5分),其他方面保持不变。
请帮忙。谢谢。当您处理
$firstarray
时,您需要保留任何分数是否低于15的信息。在这里,我们添加了一个可以评分
标志来存储:
$totalmarkscore = array_reduce(
$firstarray,
function($result, $item) {
$id = key($item);
$scores = $item[$id];
$result[$id] = array(
"score" => array_sum($scores),
"can_be_scored" => min($scores) >= 15
);
return $result;
},
array()
);
这样,$totalmarkscore
应该是这样的:
Array (
[7] =>
Array (
[score] => 128
[can_be_scored] => true
)
[8] =>
Array (
[score] => 126
[can_be_scored] => true
)
[9] =>
Array (
[score] => 98
[can_be_scored] => true
)
[6] =>
Array (
[score] => 90
[can_be_scored] => false
)
)
然后,在
setRankings
中,您可以检查$item[“can__'u scored”]
是否正确,如果错误,则排除该项目。您如何知道他只有5分?请出示决定这一点的代码。还要记住,如果两个学生是前一个,他们的排名相同,你需要跳过下一个。@Casimirithippolyte,我做到了,我有一个排名函数setRankings($var)
,它决定了这一点。请查看$secondarray的预期输出。您从哪里获得信息?如果它来自数据库,考虑计算和过滤,同时查询数据库。在这种情况下,我建议从您可以直接使用的格式从数据库中获取数据。Solymosi,请看我期望的第二个数组的输出。不清楚您到底想要什么。是否要将分数小于15的用户的分数包括在内,但将其从排名计算中排除?还是要从最终数组中完全排除这些用户?