Home Tecnologia Flashos Humor Videos Lletres Fotos Visita el Planet La Dragonera,
El Cercle de Webs Amigues

PHP: Ordenació d’un array de 2 dimensions

Print This Post/Page
Lectures: 577
 Vots | Mitjana: 0 de 5 Vots | Mitjana: 0 de 5 Vots | Mitjana: 0 de 5 Vots | Mitjana: 0 de 5 Vots | Mitjana: 0 de 5 (No s'ha votat encara)
Loading ... Loading ...

PHPBé, no és tan simple... es tracta d'ordenar un array de 2 dimensions segons un camp de la segona dimensió. Per explicar-me, poso un exemple: Tenim varis arrays on posem el nom i el cognom de persones, tots ells dins d'un altre array, quedant com un recordset de fitxes de persones.

PHP:
  1. $array = array(
  2.  
  3. array("nom" => "pepe", "cognom" => "garcia"),
  4.  
  5. array("nom" => "joan", "cognom" => "martinez"),
  6.  
  7. )

I volem ordenar aquest array de 2 dimensions segons el cognom. Però podem simplificar el tema i usar el asort() que ordena mantenint les claus dels elements... com? Doncs molt fàcil:

Primer de tot, muntarem un array simple amb els elements que volem ordenar, els cognoms, mantenint l'ordre:

PHP:
  1. $array_aux = array();
  2. foreach($array as $pos => $element)
  3. {
  4. $array_aux[]=$element['cognom'];
  5. }

Ara tenim un array simple, que ordenarem mantenint les claus de cada element:

PHP:
  1. asort($array_aux);

I ara que el tenim ordenat, muntarem l'array final amb les fitxes senceres, usant l'ordre que té l'array auxiliar:

PHP:
  1. $array_final = array();
  2. foreach($array_aux as $key => $value)
  3. {
  4. $array_final[]= $array[$key];
  5. }

I ja el tenim ordenat. De fet, podriem escriure una funció genèrica per fer aquest tipus d'ordenació:

PHP:
  1. function sort2Darray($array, $clau)
  2. {
  3. if(!is_array($array) || count($array)==0 || is_null($clave) || $clave=='') return false;
  4.  
  5. $array_aux = array();
  6. foreach($array as $pos => $element)
  7. {
  8. $array_aux[]=$element[$clau];
  9. }
  10.  
  11. asort($array_aux);
  12.  
  13. $array_final = array();
  14. foreach($array_aux as $key => $value)
  15. {
  16. $array_final[]= $array[$key];
  17. }
  18.  
  19. return $array_final;
  20. }

La única cosa que he posat de mes és una comprovació de que els paràmetres passats siguin els passats...

Salut!



Deixa una resposta