Web lists-archives.com

Re: [PHP] sorting array by keys?

On Oct 20, 2015, at 11:59 PM, Tolga wrote:

21.10.2015 09:50 tarihinde Jeffry Killen yazdı:

I have been consulting the manual and playing with a few different approaches to this;

this comes the closest to what I want:

function sortAlg($_a, $_b)
                  return strcasecmp($_a, $_b);
        uksort($_result['dirs'], 'sortAlg');

$_result['dirs'] is itself an array where the associative string keys are what I want to sort by.

Everything works fine, accept
I have a series of directories that follow the naming pattern 'lab_#'
so, what happens with the sort is that the labs come out
... etc... up to lab_13
... etc... up to lab_9

Am I going to have to code to find these cases and sort them as a separate array by keys?

This is also coming out of Apache on a FreeBSD system. The sorting order appears to be creation date, as the last items created in this part of the file system appear last without any

Without any sorting most of the lab_# names come out in the right order, but that is, I believe, because all of these directories and files were posted via ftp transfer at the same time.

So, lab_0 through lab_8 come out in the right order, but lab_9 through lab_13 seem to
appear according to subsequent creation date.

its probably because of sorting algorithms checks char to char, first orders 1st char, then second, then .... , not by their numeric values.

You first need to sort as you are doing now, then collect all the names with same starting letters into new array, (for your example, collect all names with starting 'lab_' into new array) then compare/sort new arrays with using filter_var($str, FILTER_SANITIZE_NUMBER_INT) therefore, you can sort names with numeric values on last step of sorting.

Thank you for your response:
In the interum, I found what is now working:
 uksort($_result['dirs'], 'strnatcmp');
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php