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

PHP中natsort的任何替代方案,在处理带零的字母数字字符时不会失败,php,arrays,sorting,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.j

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')
你可以用这个

$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
试试看:

$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));
});

这对你有用吗?你试过你的解决方案了吗?它在PHP5.5.0上以错误的顺序返回项目。在我的末尾失败。我尝试使用这个数组([0]=>img00106.jpg,[1]=>img0031.jpg,[2]=>img00203.jpg,[3]=>img00278.jpg,[4]=>img00183.jpg,[5]=>img0018.jpg,[6]=>img00166.jpg,[7]=>img00176.jpg,[8]=>img00229.jpg,[9]=>img00284.jpg,[10]=>img00187.jpg,[12]=>IMG000256.jpg,[13]=>IMG00090.jpg,[14]=>IMG00089.jpg,[15]=>IMG00011.jpg,[16]=>IMG0005.jpg,[17]=>IMG00036.jpg,[18]=>IMG000295.jpg,[19]=>IMG00042.jpg,[20]=>IMG000260.jpg,…)服务器上的PHP版本是5.3.19谢谢。。。为我工作