自然地对平面数组排序,而不保留原始键


Naturally sort a flat array without preserving original keys

是否有办法让natsort()也改变索引?

$array = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');
natsort($array);
Array
(
    [0] => IMG0.png
    [4] => img1.png
    [3] => img2.png
    [5] => IMG3.png
    [2] => img10.png
    [1] => img12.png
)

但是我想:

$array = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');
natsort($array);
Array
(
    [0] => IMG0.png
    [1] => img1.png
    [2] => img2.png
    [3] => IMG3.png
    [4] => img10.png
    [5] => img12.png
)

array_values将有效地用顺序整数键重新索引传递给它的任何数组。所以你只需要输入:

natsort($array);
$array = array_values($array);

简单地使用sort()及其自然排序标志。这样您就不需要调用array_values()来重新索引了。

代码(演示):

sort($array, SORT_NATURAL);
var_export($array);

仅使用array_values获取数组的值并打破键值关联:

<?php
$tarray = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');
natsort($tarray);
$tarray = array_values($tarray);
?>

:

<?php
$tarray = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');
print_r($tarray);
natsort($tarray);
$tarray = array_values($tarray);
print_r($tarray);
?>

收益率:

Array
(
    [0] => IMG0.png
    [1] => img12.png
    [2] => img10.png
    [3] => img2.png
    [4] => img1.png
    [5] => IMG3.png
)
Array
(
    [0] => IMG0.png
    [1] => IMG3.png
    [2] => img1.png
    [3] => img2.png
    [4] => img10.png
    [5] => img12.png
)

见natsort注释