12

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 [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?

0

8 Answers 8

12

here an array_multisort example:

foreach ($array as $key => $node) { $timestamps[$key] = $node[2]; } array_multisort($timestamps, SORT_ASC, $array); 
Sign up to request clarification or add additional context in comments.

Comments

12

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; } 

Comments

8

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"); 

Comments

5

usort is the easiest to work with, but you can also check out array_multisort.

Comments

0

Use usort and create your own function, http://php.net/manual/en/function.usort.php

Comments

0
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"); 

Comments

0

It might be easier to insert the data into a single temporary table, then SELECT it, with ORDER BY timestamp

Comments

0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.