2011-11-28 24 views
7

Sé que hay funciones natsort() y natcasesort() en php para ordenar los elementos de la matriz en orden natural. Estoy tratando de ordenar los siguientes artículos.ordenando una matriz php alfanumérica

array[0]= '10. xyz'; 
    array[1]= '13. xyz'; 
    array[2]= '2. xyz'; 
    array[3]= '1a. xyz'; 
    array[4]= '6. xyz'; 
    array[5]= '1b. xyz'; 
    array[6]= '4a. xyz'; 
    array[7]= '4b. xyz'; 

ahora si aplico natsort(), '10 .. 'y '13 ..' están colocados por encima de '1a ..'. ¿Cómo puedo hacer que mi código php piense que '10 .. 'es mayor que' 1a ... 'y' 1a ... 'debería estar en la parte superior? la salida correcta en mi caso particular es:

'1a. xyz'; 
'1b. xyz'; 
'2. xyz'; 
'4a. xyz'; 
'4b. xyz'; 
'6. xyz'; 
'10. xyz'; 
'13. xyz'; 

he usado un encargo algo pero hace lo mismo ... se coloca '10 ..' antes '1a ...'. aquí está mi costumbre func:

function cmp($a, $b) { 
    $a_ex=explode(".",$a); 
    $b_ex=explode(".",$b); 
    if ($a_ex[0] == $b_ex[0]) { 
     return 0; 
    } 
    return ($a_ex[0] < $b_ex[0]) ? -1 : 1; 
} 
+0

única usort ..... – idm

+0

Como otros han dicho, 'natsort()' que funciona para mí. ¿Qué versión de PHP estás usando? – Hammerite

Respuesta

5

Uso natsort():

$array[0]= '10. xyz'; 
$array[1]= '13. xyz'; 
$array[2]= '2. xyz'; 
$array[3]= '1a. xyz'; 
$array[4]= '6. xyz'; 
$array[5]= '1b. xyz'; 
$array[6]= '4a. xyz'; 
$array[7]= '4b. xyz'; 

natsort($array); 

print_r($array); 
0

uso usort con su propio algoritmo personalizado

+0

natsort() presente algoritmo para ello. – pltvs

1

natsort funciona bien para mí ...

utilizar de otro modo str_pad formatear los números antes de ordenar la matriz.

O puede usort usuario con una función personalizada, tal vez con intval ...