PHP Array Sorting Top 3

155 Views Asked by At

This is my input data:

Array(
     [0] => Array(
          [name_id] => 1
          [name] => An
          [grade_point] => 19
     )
     [1] => Array(
          [name_id] => 3
          [name] => Sin
          [grade_point] => 22
     )
     [2] => Array(
          [name_id] => 9
          [name] => Xi
          [grade_point] => 18
     )
     [3] => Array(
          [name_id] => 6
          [name] => Ruan
          [grade_point] => 20
     )
)

This is the code that I've made:

php

$top_academic = $academic;
foreach ($top_academic as $key => $row) {

    $name_id[$key] = $row['name_id'];
    $name[$key] = $row['name'];
    $grade_point[$key] = $row['grade_point'];
)
array_multisort($grade_point, SORT_DESC, $top_akademik);

This sorts the data based on grade point, so the output looks like this:

Array(
     [0] => Array(
          [name_id] => 3
          [name] => Sin
          [grade_point] => 22
     )
     [1] => Array(
          [name_id] => 6
          [name] => Ruan
          [grade_point] => 20
     )
     [2] => Array(
          [name_id] => 1
          [name] => An
          [grade_point] => 19
     )
     [3] => Array(
          [name_id] => 9
          [name] => Xi
          [grade_point] => 18
     )
)

I want it to only output the first three in the sorted array, but I can't figure out how to implement it. Any help would be appreciated!

1

There are 1 best solutions below

0
Kwan On
  1. define the sort multi array function:
    /**
     * sort multi array
     * @param array $array
     * @param string $keys sort key's name
     * @param string $sort sort type constant:
     * @return array sorted array return
     */
    function arraySort($array, $keys, $sort = SORT_DESC)
    {
        $keysValue = [];
        foreach ($array as $k => $v) {
            $keysValue[$k] = $v[$keys];
        }
        array_multisort($keysValue, $sort, $array);
        return $array;
    }  
  1. sort by the key
    $a = arraySort($data, 'grade_point', SORT_DESC);
  1. cut the first 3 elements by array_slice afterwards
    $b = array_slice($a, 0, 3);
    print_r($a);