2012-08-29 13 views
13

PHP 5.4 introduce la utilidad SORT_FLAG_CASE para hacer que cualquier otra búsqueda sea insensible. Desafortunadamente esto no está disponible en PHP 5.3 o menos y por lo que se preguntaba cómo la siguiente matriz:Tipo de clave insensible a mayúsculas y minúsculas en la versión de PHP 5.3 o menos

array('a'=>2,'b'=>4,'A'=>1,'B'=>3); 

Podría ser clasificada en:

array('A'=>1,'a'=>2,'B'=>3,'b'=>4); 

A medida que la función habitual ksort() la clasifica como:

array('A'=>1,'B'=>3,'a'=>2,'b'=>4); 
+0

lo que pueda' t lo acepta hasta 2 días después de la publicación. – M1ke

+0

Bien, me olvidé de eso, así que por favor siéntase recordado en un + día;) – hakre

+0

Claro, no hay problema. – M1ke

Respuesta

23

Un comentario en una de las páginas de referencia de funciones de PHP me indicó la función uksort(); esto (y la función uasort() para ordenar por valor en lugar de clave) permiten que el algoritmo de comparación para el cambio en la clasificación rápida sea escrito por el usuario.

uksort($array, 'strcasecmp'); 

Para alcanzar fácilmente el efecto de:

combinar esto con la simple función strcasecmp() (que compara dos cadenas y devuelve < 0 para a> b y> 0 para a> b) que da:

ksort($array,SORT_STRING | SORT_FLAG_CASE); 

En PHP 5.3 o menos.

+3

Jesús, ¿cómo puede php tener un sistema de clasificación tan complicado? Y de acuerdo con los documentos: ordenar ($ words, SORT_STRING | SORT_FLAG_CASE); debería hacer un tipo de valores insensible a mayúsculas y minúsculas, pero no funciona: – 7stud

+0

Ese parámetro funcionará solo en PHP 5.4. PHP tiene muchos defectos por su antigüedad y uso, pero las actualizaciones más recientes se centran realmente en reforzar la coherencia del idioma y proporcionar funciones a las que otros idiomas están acostumbrados. – M1ke

+0

cómo cambiaría uksort ($ array, 'strcasecmp'); ordenar en orden inverso? – Flion

1

Ésta es la forma en que he ordenado (mayúsculas y minúsculas) matriz de cadenas UTF8 en PHP 7:

uksort($myarray, function ($a, $b) { 
    $a = mb_strtolower($a); 
    $b = mb_strtolower($b); 
    return strcmp($a, $b); 
}); 

Para PHP 5.3 que necesita para crear su propia función de clasificación:

function mySort1($a, $b) { 
    $a = mb_strtolower($a); 
    $b = mb_strtolower($b); 
    return strcmp($a, $b); 
} 
uksort($result['rows'], 'mySort1'); 
Cuestiones relacionadas