Page 1 of 1

Ordering numbered arrays

Posted: Sun Nov 25, 2007 9:17 pm
by Mr Tech
I've got the following code to sort an array:

Code: Select all

$files[1][file] = "1.jpg";
$files[1][file] = "2.jpg";
$files[1][file] = "3.jpg";
$files[1][file] = "4.jpg";
$files[1][file] = "5.jpg";
$files[1][file] = "6.jpg";
$files[1][file] = "7.jpg";
$files[1][file] = "8.jpg";
$files[1][file] = "9.jpg";
$files[1][file] = "10.jpg";
$files[1][file] = "11.jpg";
$files[1][file] = "12.jpg";
$files[1][file] = "13.jpg";
$files[1][file] = "14.jpg";
$files[1][file] = "15.jpg";
$files[1][file] = "16.jpg";
$files[1][file] = "17.jpg";
$files[1][file] = "18.jpg";
// etc etc etc

	function cmp($a, $b) {
		return strcmp($a["file"], $b["file"]);
	}

	usort($files, "cmp");
	
	foreach($files as $id => $file) {
		// php goes here...
	}
This works however the 'files' orders like this:

1.jpg
10.jpg
11.jpg
etc

Instead of

1.jpg
2.jpg
3.jpg
etc

What am I doing wrong?

Posted: Sun Nov 25, 2007 10:06 pm
by Christopher
how about:

Code: Select all

function cmp_int($a, $b) {
    if ((int)$a["file"] == (int)$b["file"]) {
        return 0;
    }
    return ((int)$a["file"] < (int)$b["file"]) ? -1 : 1;
   }

Posted: Sun Nov 25, 2007 10:19 pm
by s.dot
Have you had a look at natsort()?