PHP中natsort的任何替代方法,在使用零处理字母数字字符时不会失败

时间:2013-12-07 10:49:14

标签: php arrays sorting

是否有任何替代natsort可以处理像这样的数组

array('IMG0001.jpg','IMG00010.jpg','IMG0002.jpg','IMG000100.jpg','IMG00090.jpg','IMG00020.jpg','IMG000200.jpg')

预期产出

array('IMG0001.jpg','IMG0002.jpg','IMG00010.jpg','IMG00020.jpg','IMG00090.jpg','IMG000100.jpg','IMG000200.jpg')

2 个答案:

答案 0 :(得分:1)

您可以使用此

$arr=array('IMG0001.jpg','IMG00010.jpg','IMG0002.jpg','IMG000100.jpg','IMG00090.jpg','IMG00020.jpg','IMG000200.jpg');
sort($arr, SORT_NATURAL );// also sort($arr, SORT_NATURAL | SORT_FLAG_CASE) for case sensitive sorting

答案 1 :(得分:1)

试一试:

$x = ['IMG0001.jpg','IMG00010.jpg','IMG0002.jpg','IMG000100.jpg',
      'IMG00090.jpg','IMG00020.jpg','IMG000200.jpg'];

function removeLeadingZeros($x) {
    return preg_replace('!([^\d]+)0+!', '\\1', $x);
}

usort($x, function ($a, $b) {
    return strnatcmp(removeLeadingZeros($a), removeLeadingZeros($b));
});