Array Sorting PHP by timestamp
I have problem ordering an array in the way I want.
This is an example output of my array:
# 159 rows in total
Array
(
[0] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025723
[3] => /fcTGqQGD
)
[1] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025723
[3] => /YQNk8yqa
)
[2] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025723
[3] => /u2BNPrad
)
[3] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025722
[3] => /d/blogdialain.com
)
[4] => Array
(
[0] => pastebin
开发者_Go百科 [1] =>
[2] => 1305025722
[3] => /d/shopcraze.com
)
[5] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025722
[3] => /domains_archive/175
)
[6] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025722
[3] => /d/togou.com
)
[7] => Array
(
[0] => pastebin
[1] =>
[2] => 1305025722
[3] => /W6NafmJa
)
)
Complete array data here: http://pastebin.com/GJNBmqL7
Data comes from various database at once, so I'm limited in the way that I put the data into the array.
The [2] always contains a linux timestamp. Now I want the entire array to be ordered by that timestamp, with the lowest value first.
How can I get that done?
use usort that accepts custom function to sort arrays:
usort
your function may look something like:
function cmp($a, $b)
{
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
here an array_multisort example:
foreach ($array as $key => $node) {
$timestamps[$key] = $node[2];
}
array_multisort($timestamps, SORT_ASC, $array);
You can do this simply by using a custom sort. So assuming your datestamp is always index 2:
function sortArray($a1, $a2){
if ($a1[2] == $a2[2]) return 0;
return ($a1[2] > $a2[2]) ? -1 : 1;
}
usort($array, "sortArray");
usort is the easiest to work with, but you can also check out array_multisort.
Use usort and create your own function, http://php.net/manual/en/function.usort.php
function cmp($a, $b)
{
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
$data = array( /* your data */ );
usort($data, "cmp");
It might be easier to insert the data into a single temporary table, then SELECT it, with ORDER BY timestamp
This can be achieved with following code:
usort($variable, function ($a, $b) {
if ($a['timestamp'] == $b['timestamp']) {
return 0;
}
return ($a['timestamp'] < $b['timestamp']) ? 1 : -1;
});
This will result in sorted array of $variable, assuming time-stamp is at
$variable[0]['timestamp'];
$variable[0]['timestamp'];
and so on.
精彩评论