所以我有一个
学生模型、科目模型、分数模型,其中有总分字段
我想做的是得到一个班每个学生的考试总分,然后根据班上的最高分检索结果,然后将这些分数定位为1,2,3...
最后得到单个学生的位置并将其存储在考试记录表中。
到目前为止,我已经能够获得每个学生的考试总分,将它们存储在数组中,根据最高分排序,
现在唯一让我头疼的问题是从数组中获取这些分数的位置,我的问题是如何获取学生分数的位置,或者是否有方法将位置添加到分数中,然后检索学生的位置
例如
这是我的代码下面,请任何人有一个想法如何解决这个我需要你的帮助。
TextInput::make('position')->numeric(
function (Closure $set) {
// Get all students from class
$studentsInClass = $this->class->students;
//empty array to store student's total_score
$totalScore = [];
// loop through students get all their total_score on all subjects from mark table and sum it, then store it
in totalScore array.
foreach ($studentsInClass as $key => $student) {
$totalScore[] = array('student_id' => $student->id, 'total_score' => $student->marks->sum('total_score') );
}
// Sort scores from highest to lowest
$sortedScores= array_values(array_reverse(Arr::sort($totalScore, function ($value) {
return $value['total_score'];
})));
// get the current student Id
$id = $this->student->id;
// find a student in the array that matches the current student id and return his score.
//so this is where I would like to return the score and position of the student
$filteredArray = Arr::where($sortedScores, function ($value, $key) use ($id) {
return $value['student_id'] == $id;
});
}
)->disabled(),
如果您添加了($sortedScores)
3条答案
按热度按时间ddhy6vgd1#
你有一个二维数组。
每一行的索引从0-3已经是连续的。我想你想给这些行加一个秩。
输出:
如果你想让rank从0开始,只需要赋值$idx。
在https://3v4l.org/9Dv7D上试用
我希望这对你有帮助,并且我正确地理解了你的问题。
若要在多维数组中查找特定值的键,请参见“PHP Multidimensional Array Searching (Find key by specific value)”
sqxo8psd2#
你可以使用array_search()函数,它返回你要找的值的键,如果它不在数组中,则返回false。
0ejtzxu13#
假设
$filteredArray
包含单个项,那么第一个键应该是学生在排序数组中的位置。