2011-09-07 24 views
5

Có cách nào để natsort cũng thay đổi các chỉ mục không?PHP natsort giữ chỉ mục

I.e.

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

Nhưng tôi muốn:

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

Trả lời

21

array_values hiệu quả sẽ reindex bất kỳ mảng truyền cho nó với các phím số nguyên liên tiếp. Vì vậy, bạn chỉ cần thực hiện:

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

Đẹp; cảm ơn. Sẽ đánh dấu là câu trả lời – jdborg

1

Chỉ cần sử dụng array_values để có được các giá trị của mảng và phá vỡ các liên kết giá trị khóa:

<?php 

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

?> 

Vì vậy:

<?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); 

?> 

sản lượng:

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 
) 

Xem comment on natsort.

Các vấn đề liên quan