如果在Array PHP中找到相同的值,则按时间排序

i have following array data

0 =>
id => 1
id_requestor => 1
jam_input => 2015-07-04 08:00:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 10

1 =>
id => 2
id_requestor => 2
jam_input => 2015-07-04 06:23:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 15

2 =>
id => 3
id_requestor => 3
jam_input => 2015-07-04 07:24:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 15

3 =>
id => 4
id_requestor => 4
jam_input => 2015-07-04 05:09:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 10

In above array, there are some total_poin data that have same value, but different jam_input value.

I want to sort array data in descending order. And i already sort it by desc. But i want to add jam_input value checking if found same value in total_poin. And then, if found jam_input[i] < jam_input[i+1] add data in i in front of i+1.

Here is my sorting code :

function LJFAlgorithm($arrayParam) {

        // Ambil Data array dari database sesuai dengan waktu sekarang
        $batchData = getBatch($arrayParam);

        // Flag untuk penanda apakah array sudah tersortir
        $sorted = false;

        // Jika belum tersortir maka
        while (false === $sorted) {
            $sorted = true;

            // Looping batchData - 1
            for ($i = 0; $i < count($batchData)-1; ++$i) {

                // Data Awal
                $current = $batchData[$i]['total_poin'];

                // Data Indeks selanjutnya
                $next = $batchData[$i+1]['total_poin'];

                // Jika poin awal data > dari poin selanjutnya maka,
                if ($next > $current) {

                    // Ganti nilai data awal dengan data selanjutnya
                    $batchData[$i]['total_poin'] = $next;

                    // Ganti data selanjutnya dengan data awal
                    $batchData[$i+1]['total_poin'] = $current;

                    // Ganti status berurutan ke false 'reset ulang'
                    $sorted = false;
                } else if ($next == $current) {
                    // If found same total_poin
                    if (strtotime($batchData[$i]['jam_input']) > strtotime($batchData[$i + 1]['jam_input'])) {
                        // Ganti nilai data awal dengan data selanjutnya
                        $batchData[$i]['total_poin'] = $next;

                        // Ganti data selanjutnya dengan data awal
                        $batchData[$i+1]['total_poin'] = $current;
                    }

                }
            }
        }

        // Kembalikan array yang sudah terurut
        return $batchData;
    }

My current result is like this.

0 =>
id => 1
id_requestor => 1
jam_input => 2015-07-04 08:00:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 10

1 =>
id => 2
id_requestor => 2
jam_input => 2015-07-04 06:23:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 15

2 =>
id => 3
id_requestor => 3
jam_input => 2015-07-04 07:24:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 15

3 =>
id => 4
id_requestor => 4
jam_input => 2015-07-04 05:09:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 10

My expected result is :

0 =>
id => 2
id_requestor => 2
jam_input => 2015-07-04 06:23:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 15

1 =>
id => 3
id_requestor => 3
jam_input => 2015-07-04 07:24:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 15

2 =>
id => 4
id_requestor => 4
jam_input => 2015-07-04 05:09:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 10

3 =>
id => 1
id_requestor => 1
jam_input => 2015-07-04 08:00:00
jam_pakai => 2015-07-04 08:30:00
total_poin => 10

Please help ^^ Thank you very much.

sort by usort. If total_poins are equal compare times using strtotime

usort($arrayParam, function($a, $b) { 
        return  ($ret =  $b['total_poin'] - $a['total_poin'] ) ? 
                 $ret : 
                 strtotime($a['jam_input']) - strtotime($b['jam_input']); } );
print_r($arrayParam);