Domanda

I have a php file that is creating a array of everything in my users directory, the array is then being sent back to a iPhone.

The array that my php is creating is ordering them alphabetically, i want it to sort by the date the file was created..

Here is what my php file looks like

<?php
$username = $_GET['username'];
$path = "$username/default/";


$files = glob("{$path}/{*.jpg,*.jpeg,*.png}", GLOB_BRACE);

// output to json
echo json_encode($files);

?>

How would i do this?

Thanks :)

È stato utile?

Soluzione

Using usort() with a callback which calls filemtime()...

This is untested, but I believe it will set you on the correct path...

// First define a comparison function to be used as a callback
function filetime_callback($a, $b)
{
  if (filemtime($a) === filemtime($b)) return 0;
  return filemtime($a) < filemtime($b) ? -1 : 1; 
}

// Then sort with usort()
usort($files, "filetime_callback");

This should sort them oldest-first. If you want them newest-first, change < to > in the callback return ternary operation.

Altri suggerimenti

As Michael Berkowski mentioned, using usort() is the way to go, but if this is a one-off sorting (i.e. you only need to sort an array this way once in your code), you can use an anonymous function:

usort($files, function ($a, $b){
    if (filemtime($a) === filemtime($b)) return 0;
    return filemtime($a) < filemtime($b) ? -1 : 1; 
});

While not necessary, it does save a function call.

If you need to sort files this way more than once, creating a separate named function is preferable.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top