-2

I have array $leaderboard. Which contains following data

Array
(
    [0] => Array
        (
            [name] => ABC
            [time_taken] => 01:46:56
        )

    [1] => Array
        (
            [name] => DEF
            [time_taken] => 00:21:54
        )

    [2] => Array
        (
            [name] => MNO
            [time_taken] => 00:34:14
        )

    [3] => Array
        (
            [name] => PQR
            [time_taken] => 00:09:17
        )

    [4] => Array
        (
            [name] => XYZ
            [time_taken] => 00:34:14
        )

    [5] => Array
        (
            [name] => STR
            [time_taken] => 00:34:14
        )

    [6] => Array
        (
            [name] => LOK
            [time_taken] => 17:53:58
        )
}

I tried to sort the array on basis of time. Its working fine if time values not duplicate using ksort. But for duplicated time it only shows on record from that

Arul Dinesh
  • 550
  • 4
  • 15

4 Answers4

1
<h4>function aasort (&$array, $key) {
<br>
    $sorter=array();<br>
    $ret=array();<br>
    reset($array);<br>
    foreach ($array as $ii => $va) {<br>
        $sorter[$ii]=$va[$key];<br>
  <br>  }
    asort($sorter);<br>
    foreach ($sorter as $ii => $va) <br>{

        $ret[$ii]=$array[$ii];
    }
    $array=$ret;<br>
}

aasort($your_array,"order");</h4>
zzlalani
  • 22,960
  • 16
  • 44
  • 73
0

You can define your own sorting function and use uksort. More about that: uksort

MaGnetas
  • 4,918
  • 4
  • 32
  • 52
0

give it a try please..

function cmp( $a, $b ) { 
  if(  strtotime($a['time_taken']) ==  strtotime($b['time_taken']) ){ return 0 ; } 
  return (strtotime($a['time_taken']) < strtotime($b['time_taken'])) ? -1 : 1;
} 

usort($leaderboard,'cmp');

reference https://stackoverflow.com/a/9001655/829533

Community
  • 1
  • 1
zzlalani
  • 22,960
  • 16
  • 44
  • 73
0

Try this code,

<?php

$sortArray = array(array('name' => 'ABC',
                        'time_taken' => '01:46:56'),
                    array('name' => 'DEF',
                        'time_taken' => '00:21:54'),
                    array('name' => 'MNO',
                        'time_taken' => '00:34:14'),
                    array('name' => 'PQR',
                        'time_taken' => '00:09:17'),
                    array('name' => 'XYZ',
                        'time_taken' => '00:34:14'),
                    array('name' => 'LOK',
                        'time_taken' => '17:53:58'));
print_r($sortArray);
foreach ($sortArray as $key => $row) {
    $sorting[$key] = $row['time_taken'];
}
array_multisort($sorting, SORT_ASC, $sortArray);
print_r($sortArray);
Ajith S
  • 2,907
  • 1
  • 18
  • 30