¿Es posible ordenar una matriz de PHP con una configuración regional?
Esta es la configuración:
Estoy haciendo una lista ordenada interactiva en PHP. Mediante la entrada del usuario, se puede hacer que una de varias categorías (columnas) dirija la clasificación (nombre, residencia, etc.). Esto lo resolví usando la función array_multisort() .
Siguiente obstáculo. La lista está en sueco y el usuario esperará un orden alfabético en sueco: abcdefghijklmnopqrstuvxyzåäö. En este momento, el intérprete clasifica åäö como no alfabéticos y los coloca antes de "a". ¿Cómo remediar?
Encontré información dispersa sobre una setlocale(LC_COLLATE, "sv_SV") , pero las críticas no fueron muy favorables y no logré comprender cómo podría usarse con array_multisort() . ¿Puede? y si es así, ¿cómo? ¿Hay otra forma dentro de php?
La cuestión es que debe haber alguna manera: abundan los sitios web suecos en los que se aplica el orden de clasificación sueco. se puede hacer con php?
Utilice collator_sort o collator_asort .
// sorting properly accented "Č" in Czech language (should come after "C" and before "D") // 1) Simple sort: $array = ['bca', 'čaz', 'cba', 'abc', 'daz']; $collator = collator_create('cs-CZ'); collator_sort($collator, $array); // result: // ['abc', 'bca', 'cba', 'čaz', 'daz'] // 2) Maintain index assotiations: $array = [ 'x' => 'Česko', 'y' => 'Dänmark', 'z' => 'Brunei', 'w' => 'Cyprus' ]; $coll = collator_create('sk'); // set Slovak locale (or sk-SK) collator_asort($coll, $array); /* result: $array = [ 'z' => 'Brunei', 'w' => 'Cyprus', 'x' => 'Česko', 'y' => 'Dänmark', ]; */Utilice SORT_LOCALE_STRING como tercer parámetro de la función array_multisort() . Los documentos de PHP dicen:
SORT_LOCALE_STRING: compara elementos como cadenas, según la configuración regional actual. Utiliza la configuración regional, que se puede cambiar usando setlocale()
ejemplo:
$result=array_multisort( $input_array, SORT_ASC, SORT_LOCALE_STRING);Lo siento. Este no era el problema que pensaba que era. El texto escrito en mi código se ordena correctamente (solo que ä se ordena incorrectamente antes de å, pero eso parece un error en las especificaciones (?)).
De todos modos, el problema es obviamente con la codificación de caracteres. Es cuando el texto se obtiene de una base de datos de Contact Form 7 (complemento de WordPress) que surge el problema. Presumiblemente tiene otra codificación y necesita conversión.
Gracias de cualquier manera.