How to sort 3 columns value in one array

Hi all,

i wanted to rebuild an array sort order by 3 column (ordering 1. key[user] > 2. key[mid] > 3. key[timestamp] ) so how can i do that? Thanks.

Please see below array

before sort

Array
(
[data] => Array

   [1] => Array            (

            [mid] => aaaaa
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11111
            [initial_timestamp] => 1293005125
            [user] => administrator
        )

    [2] => Array
        (

            [mid] => aaaaa
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11111
            [initial_timestamp] => 1293001908
            [user] => user1
        )

    [3] => Array
        (

            [mid] => aaaaa
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11222
            [initial_timestamp] => 1293009999
            [user] => user1
        )
[4] => Array
        (

            [mid] => bbbbb
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11111
            [initial_timestamp] => 1293009999
            [user] => administrator
        )
[5] => Array
        (

            [mid] => bbbbb
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 44444
            [initial_timestamp] => 1293009999
            [user] => user1
        )
[6]=> Array
        (

            [mid] => bbbbb
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 33333
            [initial_timestamp] => 1293009999
            [user] => user1
        )

After sort

Array
(
[data] => Array
(
[1] => Array
(

            [mid] => aaaaa
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11111
            [initial_timestamp] => 1293005125
            [user] => administrator
        )

[2] => Array
        (

            [mid] => bbbbb
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11111
            [initial_timestamp] => 1293009999
            [user] => administrator
        )
[3] => Array
        (

            [mid] => aaaaa
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11111
            [initial_timestamp] => 1293001908
            [user] => user1
        )

[4] => Array
        (

            [mid] => aaaaa
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 11222
            [initial_timestamp] => 1293009999
            [user] => user1
        )
[5] => Array
        (

            [mid] => bbbbb
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 33333
            [initial_timestamp] => 1293009999
            [user] => user1
        )
[6] => Array
        (

            [mid] => bbbbb
            [viewed] => TRUE
            [active] => TRUE
            [time] => December 22, 2010 13:00 hours
            [timestamp] => 44444
            [initial_timestamp] => 1293009999
            [user] => user1
        )

You can use uasort to do want you want: http://php.net/manual/en/function.uasort.php

Here’s just a silly example of usage:
[php]<?php
/* Compare batting averages */
$players = array(
34 => array(‘player’ => ‘McCann, Josh’, ‘ab’ => 36, ‘h’ => 13, ‘avg’ => .361),
24 => array(‘player’ => ‘Cabrera, Miguel’, ‘ab’ => 22, ‘h’ => 7, ‘avg’ => .318),
41 => array(‘player’ => ‘Martinez, Victor’, ‘ab’ => 22, ‘h’ => 2, ‘avg’ => .091),
28 => array(‘player’ => ‘Martinez, J.D.’, ‘ab’ => 56, ‘h’ => 19, ‘avg’ => .339)
);

echo ‘

Array as is

’. print_r($players, 1) . ‘
’;

// Sort by Player’s Name:
uasort($players, function($x, $y) {
return strcasecmp($x[‘player’], $y[‘player’]);
});

echo ‘

Array sorted by player’s name

’ . print_r($players, 1) . ‘
’;

// Sort by Player’s Batting Average:
uasort($players, function($x, $y) {
return ( $x[‘avg’] < $y[‘avg’] );
});

echo ‘

Array sorted by player’s batting average

’ . print_r($players, 1) . ‘
’;[/php]

I believe you will have to sort it array twice since you want to sort 3 columns?

I assume your data is coming from a database. In that case, you can just use ORDER BY to get your data the way you want right out of the database. Let the DB do the work.

Sponsor our Newsletter | Privacy Policy | Terms of Service