Las funciones que utiliza Php para ordenar alfabéticamente los valores de un Array tienen un problema, y es que no se entienden muy bien con los acentos y esto provoca que el orden de los valores no sea realmente alfabético.

Con esta función solucionamos este problema, los valores se ordenaran como si no tuvieran acentuación aunque la seguirán conservando.

Función:

<?php
function callback($name1,$name2){
    $patterns = array(
        'a' => '(á|à|â|ä|Á|À|Â|Ä)',
        'e' => '(é|è|ê|ë|É|È|Ê|Ë)',
        'i' => '(í|ì|î|ï|Í|Ì|Î|Ï)',
        'o' => '(ó|ò|ô|ö|Ó|Ò|Ô|Ö)',
        'u' => '(ú|ù|û|ü|Ú|Ù|Û|Ü)'
    );          
    $name1 = preg_replace(array_values($patterns), array_keys($patterns), $name1);
    $name2 = preg_replace(array_values($patterns), array_keys($patterns), $name2);          
    return strcasecmp($name1, $name2);
}
?>

Ejemplo de uso:

<?php
$categories = array("Valor","Ácento valor");

uasort($categories,"callback");

var_dump($categories);
?>

Si te ha sido de utilidad ¡deja un comentario! 🙂