2010-01-17 12 views
10

Quiero ordenar los valores de una matriz en orden alfabético en PHP. Si todos los valores comenzaron con el mismo carácter, entonces deberían clasificarse con el segundo carácter y así sucesivamente. Ignorar mayúsculas y minúsculas.PHP: cómo ordenar los valores de una matriz en orden alfabético?

Por ejemplo:

before: 
values[0] = "programming"; 
values[1] = "Stackoverflow"; 
values[2] = "question"; 
values[3] = "answers"; 
values[4] = "AA Systems"; 

after: 
values[0] = "AA Systems"; 
values[1] = "answers"; 
values[2] = "programming"; 
values[3] = "question"; 
values[4] = "Stackoverflow"; 

He encontrado algunos algoritmos, pero quiero una manera que es rápido y con un pequeño número de estados. Ignorar mayúsculas y minúsculas es especial para mí. Gracias.

Respuesta

5

Su ejemplo hace dos suposiciones:

  1. que sólo está tratando con matrices simples, 1-dimensionales.

  2. Que después de ordenar alfabéticamente, su índice se actualizará de modo que al primer elemento se le asignará alfabéticamente la clave 0 y así sucesivamente.

Dados esos parámetros, la solución más simple es usar el método de matriz sort(). Con su ejemplo:

$values[0] = "programming"; 
$values[1] = "Stackoverflow"; 
$values[2] = "question"; 
$values[3] = "answers"; 
$values[4] = "AA Systems"; 

sort($values); 

lo que resultará en lo siguiente:

Array { 
    [0] => AA Systems 
    [1] => Stackoverflow 
    [2] => answers 
    [3] => programming 
    [4] => question 
} 

Hay other array sorting functions que podría ser un mejor ajuste. Por ejemplo, el sencillo que uso arriba pone en mayúscula delante de minúsculas, por lo que si tuviera "seguridad" como un ítem (en minúsculas) iría después de "Stackoverflow" ya que la mayúscula s tener prioridad sobre se contra st. Para ordenar sin mayúsculas y minúsculas, puede utilizar natcasesort(), lo que produciría el siguiente con la matriz dada:

Array { 
    [0] => AA Systems 
    [1] => answers 
    [2] => programming 
    [3] => question 
    [4] => Stackoverflow 
} 
+0

La clasificación distingue entre mayúsculas y minúsculas. Stackoverflow se colocaría * antes * de las respuestas. – Tyzoid

4

partir de la versión 5.4.0, sólo puede utilizar cualquiera de los sort, asort, ksort, etc. .funciona y pasa la bandera SORT_FLAG_CASE.

sort($array, SORT_FLAG_CASE); // Non-associative array 
asort($array, SORT_FLAG_CASE); // Associative array 
ksort($array, SORT_FLAG_CASE); // Associative array, sort by indices 

Si tienes una versión anterior y no está listo para actualizar (o no puede), puede utilizar natcasesort como otros han mencionado, sino también los uasort y ksort variantes con strcasecmp como la costumbre función:

natcasesort($array);   // Non-associative array 
uasort($array, 'strcasecmp'); // Associative array 
uksort($array, 'strcasecmp'); // Associative array, sort by indices 

se puede aplicar el mismo concepto a cualquiera de los otros sorting functions.

+0

La respuesta correcta para esta pregunta es '' 'ksort ($ data, SORT_FLAG_CASE | SORT_NATURAL);' '' –

0

Puede utilizar uasort(): http://php.net/manual/en/function.uasort.php

uasort($arr, 'strcasecmp'); 

El segundo argumento es una función, que compara los valores. La función debe devolver -1, 0 o 1. Aquí hay una plantilla, que puede usar para sus funciones personalizadas.

function cmp($a, $b) { 
    if ($a == $b) return 0; 
    elseif ($a > $b) return 1; 
    elseif ($a < $b) return -1; 
} 

uasort($arr, 'cmp'); 

Después de ordenar, es posible que desee restablecer los índices de matriz.

$arr = array_values($arr); 
Cuestiones relacionadas