2011-09-07 5 views
5

¿Hay alguna manera de que natsort también cambie los índices?PHP natsort mantiene el índice

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 
) 

Pero quiero:

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

Respuesta

21

array_values se indexar de manera efectiva cualquier matriz pasada a ella con las teclas de números enteros secuenciales. Por lo que sólo tiene que hacer:

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

Hermoso; Gracias. Marcará como respuesta – jdborg

1

sólo tiene que utilizar array_values para obtener los valores de la matriz y romper la asociación de clave-valor:

<?php 

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

?> 

Así:

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

?> 

rendimientos:

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 
) 

Ver comment on natsort.

Cuestiones relacionadas