Сортировка массива с нулевыми значениями Последнее использование array_multisort - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь отсортировать итоговые оценки некоторых учеников по возрастанию и по итоговым оценкам по убыванию, используя array_multisort, за исключением того, что у меня есть одно задание - ученик с нулевыми итоговыми оценками и оценками увеличивается.Мне нужно, чтобы студент был последним в списке.

    $vc_array=array(
      0 => 
        array(
              'student_name' =>  'student one',
              'total' =>  227,
              'total_grades' =>  27),
        1 => 
        array(
              'student_name' =>  'student two',
              'total' =>  313,
              'total_grades' =>  14),
        2 => 
        array(
              'student_name' =>  'student three',
              'total' =>  317,
              'total_grades' =>  13),
        3 => 
        array (
              'student_name' =>  'student four' ,
              'total' =>  271,
              'total_grades' =>  20),
        4 => 
        array (
              'student_name' =>  'student five',
              'total' =>  0,
              'total_grades' =>  0));


    foreach ($vc_array as $key => $row)
{
   $vc_array_value[$key] = $row['total_grades'];
   $vc_array_name[$key] = $row['total'];
 }
array_multisort($vc_array_value, SORT_ASC, $vc_array_name, SORT_DESC, vc_array);

, когда я запускаю var_dump ($ vc_array);это положить это ....

array (size=5)
  0 => 
    array (size=3)
      'student_name' => string 'student five' (length=12)
      'total' => int 0
      'total_grades' => int 0
  1 => 
    array (size=3)
      'student_name' => string 'student three' (length=13)
      'total' => int 317
      'total_grades' => int 13
  2 => 
    array (size=3)
      'student_name' => string 'student two' (length=11)
      'total' => int 313
      'total_grades' => int 14
  3 => 
    array (size=3)
      'student_name' => string 'student four' (length=12)
      'total' => int 271
      'total_grades' => int 20
  4 => 
    array (size=3)
      'student_name' => string 'student one' (length=11)
      'total' => int 227
      'total_grades' => int 27

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, что один из способов обойти это - отфильтровать значения, где total и total_grades равны 0 в $vc_array, и сохранить их в отдельном массиве.

Затем выполните сортировку и в конце объедините массив, где оба значения равны нулю, до $vc_array.

$totalZero = [];
$vc_array = array_filter($vc_array, function($x) use (&$totalZero) {
    if ($x['total'] === 0 && $x['total_grades'] === 0) {
        $totalZero[] = $x;
    }
    return $x['total'] !== 0 || $x['total_grades'] !== 0;
});

foreach ($vc_array as $key => $row)
{
    $vc_array_value[$key] = $row['total_grades'];
    $vc_array_name[$key] = $row['total'];
}

array_multisort($vc_array_value, SORT_ASC, $vc_array_name, SORT_DESC, $vc_array);
$vc_array = array_merge($vc_array, $totalZero);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...