Im having hard time to figure out sorting files by name and date

DaNcE-eViL

[H]ard|Gawd
Joined
Oct 31, 2001
Messages
1,128
Dear friends,

i hope you can help me with this..i've been trying to figure out all day - even i did search google or check php website - far too confusing for me to understand...

Code:
$filesArray = array();
$counter = 0;

if ($handle = opendir('photo')) {
	while (false !== ($file = readdir($handle))) {
		 
		if ($file != "." && $file != ".." && $file != ".DS_Store") {
			
			$counter++;
			$info = pathinfo($file);
			$file_name =  basename($file,'.'.$info['extension']);	
			$str=$file_name;
			$len=strlen($str);
			$test=substr($str,0,($len-3));																		
			$filesArray[][0] = $file;
			$filesArray1[][1] = date ("F d Y H:i:s.", filemtime("photo/".$file));
			//sort($filesArray);
			[COLOR="Red"]array_multisort($filesArray,SORT_DESC,$filesArray1,SORT_DESC);[/COLOR]
			
		}
	}
	closedir($handle);
}
			//var_dump($filesArray);
			//var_dump($filesArray1);

// echo $counter++."\n";

echo "\n\n\n";

$i=0;
$m=0;
while($i<=$counter-2 & $m<=$counter-2)
  {
	  
 echo $filesArray[$i][0]. " - ";
 echo $filesArray1[$m][1]. " - \n";
  $i++;
  $m++;
  }

above code gave me this output - see below

Code:
DSC_4655.jpg - November 08 2011 06:01:27. - 
DSC_4651.jpg - November 08 2011 06:01:25. - 
DSC_4650.jpg - November 08 2011 06:01:23. - 
DSC_4646.jpg - November 08 2011 06:01:21. - 
DSC_4642.jpg - November 08 2011 06:01:19. - 
DSC_4641.jpg - November 08 2011 06:01:17. - 
DSC_4638.jpg - November 08 2011 06:01:15. - 
DSC_4635.jpg - November 08 2011 06:01:13. - 
DSC_4633.jpg - November 08 2011 06:01:12. - 
DSC_4626.jpg - November 08 2011 06:01:10. - 
DSC_4621.jpg - November 08 2011 06:01:08. - 
DSC_4620.jpg - November 08 2011 06:01:06. - 
DSC_4611.jpg - November 08 2011 06:01:04. - 
DSC_4610.jpg - November 08 2011 06:01:03. - 
DSC_4607.jpg - November 08 2011 06:01:01. - 
DSC_4606.jpg - November 08 2011 06:00:58. - 
DSC_4605.jpg - November 08 2011 06:00:56. - 
DSC_4604.jpg - November 08 2011 06:00:54. - 
DSC_4602.jpg - November 08 2011 06:00:52. - 
[COLOR="DarkOrange"]DSC_4601.jpg - November 08 2011 06:00:48. - [/COLOR]
DSC_3757.JPG - May 11 2011 13:40:00. - 
DSC_3719.jpg - May 01 2011 23:51:16. - 
DSC_3718.jpg - May 01 2011 23:51:00. - 
DSC_3717.jpg - May 01 2011 23:50:44. - 
DSC_3716.jpg - May 01 2011 23:50:30. - 
DSC_3715.jpg - May 01 2011 23:50:14. - 
DSC_3714.jpg - May 01 2011 23:50:00. - 
[COLOR="DarkOrange"]DSC_3711.jpg - May 01 2011 23:49:40. - [/COLOR]

i'm trying to make something like this below: order by name and date

Code:
[COLOR="DarkOrange"]DSC_4601.jpg - November 08 2011 06:00:48. - [/COLOR]
DSC_4602.jpg - November 08 2011 06:00:52. - 
DSC_4604.jpg - November 08 2011 06:00:54. - 
DSC_4605.jpg - November 08 2011 06:00:56. - 
DSC_4606.jpg - November 08 2011 06:00:58. - 
DSC_4607.jpg - November 08 2011 06:01:01. - 
DSC_4610.jpg - November 08 2011 06:01:03. - 
DSC_4611.jpg - November 08 2011 06:01:04. - 
DSC_4620.jpg - November 08 2011 06:01:06. - 
DSC_4621.jpg - November 08 2011 06:01:08. - 
DSC_4626.jpg - November 08 2011 06:01:10. - 
DSC_4633.jpg - November 08 2011 06:01:12. - 
DSC_4635.jpg - November 08 2011 06:01:13. - 
DSC_4638.jpg - November 08 2011 06:01:15. - 
DSC_4641.jpg - November 08 2011 06:01:17. - 
DSC_4642.jpg - November 08 2011 06:01:19. - 
DSC_4646.jpg - November 08 2011 06:01:21. - 
DSC_4650.jpg - November 08 2011 06:01:23. - 
DSC_4651.jpg - November 08 2011 06:01:25. - 
DSC_4655.jpg - November 08 2011 06:01:27. - 
[COLOR="DarkOrange"]DSC_3711.jpg - May 01 2011 23:49:40. - [/COLOR]
DSC_3714.jpg - May 01 2011 23:50:00. - 
DSC_3715.jpg - May 01 2011 23:50:14. - 
DSC_3716.jpg - May 01 2011 23:50:30. - 
DSC_3717.jpg - May 01 2011 23:50:44. - 
DSC_3718.jpg - May 01 2011 23:51:00. - 
DSC_3719.jpg - May 01 2011 23:51:16. - 
DSC_3757.JPG - May 11 2011 13:40:00. -
 
Ditto - your filenames are sorting in a descending order.
Just flipping that alone should be enough.
 
i've tried that too but it doesnt work - what im trying to bring up newest photo at the top and old photo will go at the bottom

Code:
array_multisort($filesArray,SORT_ASC,$filesArray1,SORT_ASC);

outcome is:

Code:
[COLOR="SandyBrown"]DSC_3709.jpg - May 02 2011 00:49:24. - [/COLOR]
DSC_3711.jpg - May 02 2011 00:49:40. - 
DSC_3714.jpg - May 02 2011 00:50:00. - 
DSC_3715.jpg - May 02 2011 00:50:14. - 
DSC_3716.jpg - May 02 2011 00:50:30. - 
DSC_3717.jpg - May 02 2011 00:50:44. - 
DSC_3718.jpg - May 02 2011 00:51:00. - 
DSC_3719.jpg - May 02 2011 00:51:16. - 
DSC_3757.JPG - May 11 2011 14:40:00. - 
[COLOR="SandyBrown"]DSC_4601.jpg - November 08 2011 07:00:48. - [/COLOR]
DSC_4602.jpg - November 08 2011 07:00:52. - 
DSC_4604.jpg - November 08 2011 07:00:54. - 
DSC_4605.jpg - November 08 2011 07:00:56. - 
DSC_4606.jpg - November 08 2011 07:00:58. - 
DSC_4607.jpg - November 08 2011 07:01:00. - 
DSC_4610.jpg - November 08 2011 07:01:02. - 
DSC_4611.jpg - November 08 2011 07:01:04. - 
DSC_4620.jpg - November 08 2011 07:01:06. - 
DSC_4621.jpg - November 08 2011 07:01:08. - 
DSC_4626.jpg - November 08 2011 07:01:10. - 
DSC_4633.jpg - November 08 2011 07:01:12. - 
DSC_4635.jpg - November 08 2011 07:01:12. - 
DSC_4638.jpg - November 08 2011 07:01:14. - 
DSC_4641.jpg - November 08 2011 07:01:16. - 
DSC_4642.jpg - November 08 2011 07:01:18. - 
DSC_4646.jpg - November 08 2011 07:01:20. - 
DSC_4650.jpg - November 08 2011 07:01:22. - 
DSC_4651.jpg - November 08 2011 07:01:24. -

obviously it should start with November and then May...
 
You're sorting the dates as string literals. Sort them as numbers instead. Use filemtime() instead of date(). Why do you need two arrays when one would suffice? If you only used one, you could get away with using ksort().
 
So your overall goal is to sort by file name (not counting the date part) ASC, and date chronologically DESC?

If so one problem I see is that PHP is going to sort the dates alphabetically DESC the way you have it now.

You may need to format the date so that it is chronically friendly (such as yyyy/mm/dd), then sort it like that, and finally format the date the way you have it now.
 
You're sorting the dates as string literals. Sort them as numbers instead. Use filemtime() instead of date(). Why do you need two arrays when one would suffice? If you only used one, you could get away with using ksort().

i could get away with 1D array, however since im not running any database so i need to create 2D array which i thought as i could filters out both column (filename and date) with "order by" just like how we use in database...

in other hand its much easier to filter out in database but not in 2D array :confused:
 
So your overall goal is to sort by file name (not counting the date part) ASC, and date chronologically DESC?

If so one problem I see is that PHP is going to sort the dates alphabetically DESC the way you have it now.

You may need to format the date so that it is chronically friendly (such as yyyy/mm/dd), then sort it like that, and finally format the date the way you have it now.

i need latest DSC_number at the top with lower time shot (meaning starting photograph) which i need to get them in order for the slideshow..

Starting shot: DSC_4601.jpg 06:00:48 (Nov) / End of shot: DSC_4655.jpg 06:01:27 (Nov)
Starting shot: DSC_3711.jpg 23:49:40 (May) / End of shot: DSC_3757.jpg 13:40:00 (May)

one thing i've notice - when using array_multisort - it had no effect to the sorting file specially on "$filesArray1, SORT_NUMERIC, SORT_DESC"
Code:
array_multisort($filesArray,SORT_DESC, $filesArray1, SORT_NUMERIC, SORT_DESC);
 
there are lots of different ways to go about it.
A simple method would be to put the date first and then the filename since date appears to be fairly unique.
Once sorted use another function to cut your filenames off the end of the date field and voila, done.

more complex would be to use a sort procedure that calls a function for the comparison.
The function can do the two checks.
 
Thanks guys for helping me out by point out some clue - I've managed to figure out by breaking down into 3d array which I can use sort by date,time and filename...work as beautiful...

I'm happy at least for now lol...
 
Back
Top