Php 如何在插入mysql数据库之前对数组数据进行排序

Php 如何在插入mysql数据库之前对数组数据进行排序,php,mysql,laravel,laravel-5.4,laravel-5.5,Php,Mysql,Laravel,Laravel 5.4,Laravel 5.5,我有下面这样的表格 <form action="route('docaluculation')" method="POST"> {{ csrf_field() }} <input type="number" name="student_score_number[]"> <input type="number" name="student_score_number[]"> <input type="number" name="stude

我有下面这样的表格

<form action="route('docaluculation')" method="POST">
    {{ csrf_field() }}
  <input type="number" name="student_score_number[]">
  <input type="number" name="student_score_number[]">
  <input type="number" name="student_score_number[]">
  <input type="number" name="student_score_number[]">
  <button>Submit</button>
</form>
当提交表单时,它只插入数字,我希望它能得到每个数字的数字,并对它们进行排序和相应的分级


在我的下图中,id 1、2和10应该有第一个位置是1,然后id 3应该有第二个位置是2,等等。我尝试了我能做的,但我甚至不知道怎么做,我使用查询生成器pls,我已经阅读了循环和php数组,但我不知道在任何控制器中从何处开始

use App\YourNumbersModel;

public function sortNumbers(){

    $groupedNumbers = YourNumbersModel::get()->orderBy('number', 'desc')->groupBy('number');

    $i = 1;

    foreach($groupedNumbers as $gp){
      foreach($gp as $numberToSort){

        $DBnumber = YourNumbersModel::where('id', $numberToSort->id)->first();

        $DBnumber->position = $i;

        $DBnumber->save();
     }
     $i++;
    }

}
编辑:只是在这里编码,如果你有任何问题可以问我,希望你明白我在做什么

在插入之前,可以使用完全相同的算法

public function sortNumbers($userInput){

      $groupedNumbers = collect($userInput); //collect the request input with laravel eloquent

      $groupedNumbers = $groupedNumbers->orderBy('number', 'desc')->groupBy('number');


      foreach($groupedNumbers as $gp){
          foreach($gp as $numberToSort){

            $DBnumber = YourNumbersModel::where('id', $numberToSort->id)->first();

            $DBnumber->position = $i;

            $DBnumber->save();
         }
         $i++;
        }
}
使用等级作为位置

SET @rank=0;
    select rank,score from (select @rank:=@rank+1 AS rank,score 
    from  survey  
    order by score desc) as t2

尝试在数据库之前进行排序

$scores = sort($request->input('student_score_number'));

这是一件很正常的事情,我们都在学习:你只能用sql来做这件事,这是一点点complex@madalinivascu谢谢,我该怎么做,我在想也许我可以用foreach获取所有的数字,然后把它们存储在某个地方,对它们进行排序,然后将它们插入数据库,但我不知道这是怎么回事,任何没有意义的想法:当您输入新数据时,位置可能会改变,因此您必须重新计算整个数据库。Laravel提供了一个帮助函数来对数组进行排序:如何使用查询生成器在不同的函数$this->db->query'SET@rank=0'中运行这两个查询$此->数据库->查询“选择排名,从选择@rank中选择得分:=@rank+1作为排名,按得分描述从调查顺序中选择得分作为t2”;