我有几百个xhtml文件,我推送到一个数组的名称。命名约定为p0x.xhtml
,其中x
为1-400。我正在尝试natsort
数组,但前导p
似乎与排序有冲突。
作为最后的手段,我可以重命名文件,但如果可能的话,想要避免这种情况。如果有人知道解决方法,我会很感激。
$arr = [
'p010.xhtml',
'p08.xhtml',
'p04.xhtml'
];
print_r($arr);
natsort($arr);
print_r($arr);
产量:
Array
(
[0] => p010.xhtml
[1] => p08.xhtml
[2] => p04.xhtml
)
Array
(
[0] => p010.xhtml
[2] => p04.xhtml
[1] => p08.xhtml
)
和期望的输出将是:
Array
(
[0] => p010.xhtml
[1] => p08.xhtml
[2] => p04.xhtml
)
Array
(
[2] => p04.xhtml
[1] => p08.xhtml
[0] => p010.xhtml
)
答案 0 :(得分:0)
它表现得像宣传的那样,而不是你想要的方式。你可以切换到usort/uasort,它允许你提供自己的比较功能,在你的情况下,一个函数返回字符串的自然顺序减去前导p?
function cmp($a, $b) {
return strnatcmp ( substr($a,1) , substr($b,1) );
}
被称为
usort($arr,'cmp');
正如in another question指出的那样,在php 5.3+中,这可以改写为
usort($arr,function($a, $b) {
return strnatcmp ( substr($a,1) , substr($b,1) );
});