我如何排序一个数组中的文件名,就像在一个windows文件夹,按名称?代码和数组就像这样:
$arr = array('php__01.png','php__02.png','php__03.png','php_2_01.png','php_2_02.png','php_10_01.png','php_10_02.png','php_9_02.png','php_9_01.png','php_9_03.png');
<?php
$arr = array('php__01.png','php__02.png','php__03.png','php_2_01.png','php_2_02.png','php_10_01.png','php_10_02.png','php_9_02.png','php_9_01.png','php_9_03.png');
function cmp($a, $b) {
$a_temp = str_replace('_', '', $a);
$b_temp = str_replace('_', '', $b);
return strcmp($a_temp,$b_temp);
}
usort($arr, "cmp");
?>
像这样导出:
array(10) {
[0]=>
string(11) "php__01.png"
[1]=>
string(11) "php__02.png"
[2]=>
string(11) "php__03.png"
[3]=>
string(13) "php_10_01.png"
[4]=>
string(13) "php_10_02.png"
[5]=>
string(12) "php_2_01.png"
[6]=>
string(12) "php_2_02.png"
[7]=>
string(12) "php_9_01.png"
[8]=>
string(12) "php_9_02.png"
[9]=>
string(12) "php_9_03.png"
}
我想这样分类:
array(10) {
[0]=>
string(10) "py__01.png"
[1]=>
string(10) "py__02.png"
[2]=>
string(10) "py__03.png"
[3]=>
string(11) "py_2_01.png"
[4]=>
string(11) "py_2_02.png"
[5]=>
string(11) "py_9_01.png"
[6]=>
string(11) "py_9_02.png"
[7]=>
string(11) "py_9_03.png"
[8]=>
string(12) "py_10_01.png"
[9]=>
string(12) "py_10_02.png"
}
3条答案
按热度按时间0kjbasz61#
下面是解决方案:
http://ideone.com/Yt6jpQ
您需要用“-”替换“_”,因为在排序数字时,“-”字符排在第一位。
你还需要用前导零填充数字,这就是preg_match和sprintf的原因。
输出:
nbewdwxp2#
您可以使用usort创建自定义排序函数;在本例中,按文件名的每个元素依次排序
f0ofjuux3#
下面是一种更通用的方法,它不会在
"_"
处拆分。