2011-11-28 22 views
7

So che ci sono natsort() e le funzioni natcasesort() in php mettere ordine elementi dell'array nell'ordine naturale. Sto cercando di ordinare i seguenti elementi.ordina un array php alfanumerico

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'; 

ora se applico natsort(), '10 .. 'e '13 ..' sono posti al di sopra '1 bis ..'. come posso fare in modo che il mio codice php pensi che '10 .. 'sia maggiore di' 1a ... 'e' 1a ... 'dovrebbe essere in cima? l'uscita corretta nel mio caso particolare, è:

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

ho usato un algo personalizzato, ma fa lo stesso ... essa pone '10 ..' prima '1 bis ...'. heres il mio func personalizzato:

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

solo usort ..... – idm

+0

Come altri hanno scritto, 'natsort()' funziona per me. Quale versione di PHP stai usando? – Hammerite

risposta

5

Usa 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

utilizzo usort con il proprio algoritmo personalizzato

+0

natsort() presenta algoritmo per esso. – pltvs

1

natsort funziona bene per me ...

altrimenti utilizzare str_pad per formattare i numeri prima di ordinare l'array.

Oppure si può utente usort con una funzione personalizzata, magari con intval ...

Problemi correlati