php sort filenames with an underscore

arrays, php, sorting

Solution

You can use the php `usort` method, check it out here with `usort` you can implement your custom `compare to` function and sort the array according to it.

the custom `compare to` function is `int callback ( mixed $a, mixed $b )` , you should return a value less than 0 if `$a < $b` , zero if equal and a value bigger than 0 when `$a > $b`

implement your preferred order of sorting using this method

example:

function cmp($a, $b) {
  $aTemp = str_replace('_', '0', $a);
  $bTemp = str_replace('_', '0', $b);     
  return strcmp($aTemp,$bTemp);
}

 usort($arr, "cmp");

Problem

I have an array of filenames that I aquire using DirectoryIterator. I am trying to get the filenames to sort so they would be in order like so, this is the way they appear on the server. ``` 2DAYSALEGATE_PG1.jpg 2DAYSALEGATE_PG2.jpg 722_PG1.jpg PW_PG2_COKE_A.jpg PW_PG3_COKE_A.jpg PWBY4_DELI-1.jpg ``` When aquiring the file names they are coming out like this. I have tried to use a sort, natsort and natcasesort. The filename the underscore character is considered after the letters. What can I do to get the underscore to sorted as a priority character. ``` array(6) { [0]=> string(20) "2DAYSALEGATE_PG1.jpg" [1]=> string(20) "2DAYSALEGATE_PG2.jpg" [2]=> string(11) "722_PG1.jpg" [5]=> string(16) "PWBY4_DELI-1.jpg" [3]=> string(17) "PW_PG2_COKE_A.jpg" [4]=> string(17) "PW_PG3_COKE_A.jpg" } ``` Thanks

Original source