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, y si aún no lo has hecho no olvides suscribirte a mi blog para no perderte los próximos posts :-),También puedes seguirme en Twitter en @revigames y no olvides que me ayudas mucho si compartes este post en las redes sociales.
Gracias
no me ha sido útil
Funciona perfectamente, lo que te pasará es que si la has incluido como función, en el ejemplo falta el return.
Añade al final:
return $arrIni;
y ya tendras el array donde lo haya llamado.
Muy bueno
Excelente
Excelente función, de gran utilidad, gracias por tu aporte.
Saludos
Magnífico. Muchísimas gracias.