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. 🙂