Ordenar un array asociativo o de objetos por un campo en php

alojamiento wordpress

Hola a todos:

Hoy  os traigo una función en php que puede ser de gran utilidad a la hora de ordenar un array asociativo o un array con objetos.

Por ejemplo vamos a imaginar que tenemos un array de usuarios donde tenemos un campo con el id de usuario, otro con el nombre y otro que contiene la profesión del usuario.

Por ejemplo vamos a crear un   array con este formato:

$arrUsuarios=array
(
 array ( 
     "id" => 1,
     "nombre" => "Eduardo",
     "profesion" => "Programador"
 ),
 array ( 
     "id" => 2,
     "nombre" => "Manuel",
     "profesion" => "Dentista"
 ),
 array ( 
     "id" => 3,
     "nombre" => "Fernando",
     "profesion" => "Fontanero"
 ),
 array ( 
    "id" => 4,
    "nombre" => "Antonio",
    "profesion" => "Abogado"
 ),
 array ( 
    "id" => 5,
    "nombre" => "Pascual",
    "profesion" => "Frutero"
 ),
);

Si mostranos el contenido del array  con <?php print_r($arrUsuarios) ?> obtendremos algo parecido a esto:

Array
(
    [0] => Array
        (
            [id] => 1
            [nombre] => Eduardo
            [profesion] => Programador
        )

    [1] => Array
        (
            [id] => 2
            [nombre] => Manuel
            [profesion] => Dentista
        )

    [2] => Array
        (
            [id] => 3
            [nombre] => Fernando
            [profesion] => Fontanero
        )

    [3] => Array
        (
            [id] => 4
            [nombre] => Antonio
            [profesion] => Abogado
        )

    [4] => Array
        (
            [id] => 5
            [nombre] => Pascual
            [profesion] => Frutero
        )

)

Ahora vamos a imaginar que nos interesa ordenar este array por el nombre del usuario en orden alfabético.

Para conseguir esto vamos a crear una pequeña función que nos ayudará a conseguir este propósito:

function array_sort_by(&$arrIni, $col, $order = SORT_ASC) 
{
    $arrAux = array();
    foreach ($arrIni as $key=> $row) 
    {
        $arrAux[$key] = is_object($row) ? $arrAux[$key] = $row->$col : $row[$col];
        $arrAux[$key] = strtolower($arrAux[$key]);
    }
    array_multisort($arrAux, $order, $arrIni);
}

El primer parámetro el es el array que queremos ordenar.

El segundo parámetro es el campo por el cual queremos ordenar el array.

El tercer parámetro es opcional e indica si se ordenara en orden ascendente o descendente, por defecto ascendente.

Ahora vamos a aplicar esta función a nuestro array y mostrar el resultado.

<?php
array_sort_by($arrUsuarios, 'nombre', $order = SORT_ASC);
?>
<pre><?php print_r($arrUsuarios); ?></pre>

Como podemos observar ahora obtenemos el array ordenado alfabéticamente por el nombre del usuario:

Array
(
    [0] => Array
        (
            [id] => 4
            [nombre] => Antonio
            [profesion] => Abogado
        )

    [1] => Array
        (
            [id] => 1
            [nombre] => Eduardo
            [profesion] => Programador
        )

    [2] => Array
        (
            [id] => 3
            [nombre] => Fernando
            [profesion] => Fontanero
        )

    [3] => Array
        (
            [id] => 2
            [nombre] => Manuel
            [profesion] => Dentista
        )

    [4] => Array
        (
            [id] => 5
            [nombre] => Pascual
            [profesion] => Frutero
        )

)

Esta función en válida también para ordenar array de objetos extraidos por ejemplo de la base de datos.

Espero que os sea útil. 🙂

Un Saludo

P.D: Podéis probar mis últimos juegos para móviles. Si ponéis una valoración en alguno me hacéis un favor 😉

ico_beheading_androidico_beheading_iosico_beheading_wpGalactic InsectsGalactic InsectsGalactic InsectsSnow SoccerSnow Soccer

alojamiento wordpress

3 comentarios en “Ordenar un array asociativo o de objetos por un campo en php

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s