Urielmania

“El Mundo de Uriel… Pero la voz de todos”

Usar función Usort en codeigniter

Pues se que la vida hoy en dia  no es php y menos codeigniter , pero pues igual sigo utilizando para algunas cosas , aunque tengo que decir que ya hay algunas cosas que funcionan mejor con otra tecnologia y más si puedes pasar los datos o filtrar datos desde la bd pero bueno hay veces que todavia tenemos que trabajar con arreglos en php y pues siempre se me olvida cómo ordenarlos…

Las funciones básicas para esto son  sort(), asort() , y pues no hay mucho que decir:

sort() ordena el array de manera ascendente, cogiendo los elementos de menor a mayor. Los parámetros son estos:

  • array (obligatorio): Es el array que queremos ordenar.
  • ordenarpor (opcional): Es el método de ordenación, dependiendo de los valores que haya en el array. Sus posibles valores son los siguientes:
    · 0 = Orden por defecto comparando los valores sin importar de su tipo de valor.
    · 1 = Orden numérico de los valores del array.
    · 2 = Orden comparando los valores como si fuesen cadenas de texto.
    · 3 = Orden por cadenas de texto usando la configuración regional del servidor.
    · 4 = Orden de los elementos como cadenas de texto usando el “orden natural”, es decir, ordenando el array por clave y valor.

Existe la función opuesta rsort() con la misma sintaxis que ordena el array de manera descendente, de mayor a menor.

asort() ordena el array en orden ascendente, es decir, de menor a mayor ordenándolo por su valor. Vamos a ver los parámetros:

  • array (obligatorio): Es el array que queremos ordenar.
  • ordenarpor (opcional): Es el método de ordenación, dependiendo de los valores que haya en el array. Sus valores son los mismos expuestos en la sintaxis anterior de sort().

También existe la función opuesta, se llama arsort() y tiene la misma sintaxis, esta función ordena los arrays de forma descendentede mayor a menor por el valor de los elementos.

Hasta aquí todo bien y normal, el problema pasa cuando quieres ordenar un array multidimensional por un valor específico del mismo , si bien hay una función «según» para esto array_multisort().  lo que realmente hace es ordenar los elementos de cada array secundario y lo que nosotros queremos es ordenar los elementos del array primario según el valor de un elemento de los arrays secundarios, que es algo bien distinto, espero que se entienda la diferencia.

Así que array_multisort() no nos vale. La función que mejor nos va es usort() (acrónimo de user defined sort), pues permite ordenar el array por sus valores pero utilizando una función de comparación definida el usuario, es decir, por nosotros ?.

La función usort() se utiliza pasando el array que queremos ordenar y el nombre de la función de comparación que se utilizará. PHP pasará a esta función dos parámetros, $a y $b, siendo cada uno un elemento del array, en nuestro caso $a y $b son a su vez arrays, arrays secundarios.

En php quedaría algo como:

usort($array, 'sort_by_orden');
function sort_by_orden ($a, $b) {
    return $a['orden'] - $b['orden'];
}

Y si no lees la documentación de codeigniter como es mi caso… Pensarías que solo deberías hacer esto para usarla:

  usort($srv_records, $this->comp_primary);

Pero lamentablemente esto no funciona así, y si pones eso te saldra un error por lo cual deberías leer la documentación o mejor aún simplemente hacer esto;

usort($srv_records, array($this,'comp_primary'));

Y listo ya puedes ordenar tus arreglos multideminsionales en codeigniter.

lo vi en https://cybmeta.com

Acerca del Autor