php使用下划线排序文件名

Har*_*pua 1 php arrays sorting

我有一个使用DirectoryIterator获取的文件名数组.我试图让文件名进行排序,以便它们按顺序排列,这就是它们在服务器上的显示方式.

    2DAYSALEGATE_PG1.jpg
    2DAYSALEGATE_PG2.jpg
    722_PG1.jpg
    PW_PG2_COKE_A.jpg
    PW_PG3_COKE_A.jpg
    PWBY4_DELI-1.jpg
   

在获取文件名时,它们会像这样出现.我试过使用sort,natsort和natcasesort.在字母后面考虑下划线字符的文件名.我该怎么做才能将下划线排序为优先级字符.

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"
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Dim*_*ima 6

您可以使用php usort方法,在此处查看 ,usort您可以实现自定义compare to函数并根据它对数组进行排序.

自定义compare to函数是int callback ( mixed $a, mixed $b ),你应该返回一个小于0的值$a < $b,如果相等则为零,而当大于0时则返回一个大于0 的值$a > $b

使用此方法实现您首选的排序顺序

例:

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

 usort($arr, "cmp");
Run Code Online (Sandbox Code Playgroud)