Foros del Web » Programando para Internet » PHP »

Ordenar matriz según campo

Estas en el tema de Ordenar matriz según campo en el foro de PHP en Foros del Web. Hola, hace tiempo estoy con este problema y lo he solucionado sólo a medias. Cómo hago para ordenar una matriz del tipo Código PHP: $m ...
  #1 (permalink)  
Antiguo 23/11/2007, 09:21
 
Fecha de Ingreso: julio-2006
Mensajes: 50
Antigüedad: 17 años, 8 meses
Puntos: 0
Ordenar matriz según campo

Hola, hace tiempo estoy con este problema y lo he solucionado sólo a medias.

Cómo hago para ordenar una matriz del tipo

Código PHP:
$m[1]["nombre"]="Bruno";
$m[2]["nombre"]="Alejandro";
$m[3]["nombre"]="Marcos";
$m[1]["edad"]=21;
$m[2]["edad"]=24;
$m[3]["edad"]=17;
$m[1]["altura"]=175;
$m[2]["altura"]=181;
$m[3]["altura"]=167
para que luego al hacer un

Código PHP:
foreach($m as $m_1) {
 echo 
$m["nombre"]." tiene ".$m["edad"]." años y mide ".$m["altura"]."<br>";

me salga una lista con los usuarios ordenados por edad, nombre o altura. Y eventualmente en orden inverso.

He probado con los sort, array_multisort, y no he dado en el clavo.

Sueño con una función
Código PHP:
ordenar($matriz,$criterio,$direccion
, de tal forma que al escribir
Código PHP:
ordenar($m,"edad",1
, deje la matriz ordenada en orden descendente según la edad. E intenté construirla, pero me falló, y quizás exista algo menos rebuscado

Muchas gracias, de antemano!
  #2 (permalink)  
Antiguo 23/11/2007, 11:22
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años
Puntos: 17
Re: Ordenar matriz según campo

Código PHP:
<?php
$m
[1]["nombre"]="Bruno";
$m[2]["nombre"]="Alejandro";
$m[3]["nombre"]="Marcos";
$m[1]["edad"]=21;
$m[2]["edad"]=24;
$m[3]["edad"]=17;
$m[1]["altura"]=175;
$m[2]["altura"]=181;
$m[3]["altura"]=167;  

$ordenar 'nombre';
$direccion 'ASC';
usort($mcreate_function('$item1, $item2''return $item1[\'' $ordenar '\'] ' . ($direccion === 'ASC' '>' '<') . ' $item2[\'' $ordenar '\'];'));
print_r($m);
?>
  #3 (permalink)  
Antiguo 23/11/2007, 11:28
 
Fecha de Ingreso: noviembre-2007
Ubicación: Córdoba
Mensajes: 70
Antigüedad: 16 años, 4 meses
Puntos: 1
Re: Ordenar matriz según campo

Hola.

Échale un vistazo a la función array_multisort: http://es2.php.net/manual/es/functio...-multisort.php

Saludos.
  #4 (permalink)  
Antiguo 23/11/2007, 12:26
 
Fecha de Ingreso: julio-2006
Mensajes: 50
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Ordenar matriz según campo

Gracias por sus comentarios, aunque me funcionan las dos (considerando la de javierav un ejemplo de multisort). No funcionan cuando hago una función sea la que ordena. No entiendo por qué puede pasar esto.

Código PHP:
$m[1]["nombre"]="bruno";
$m[2]["nombre"]="Alejandro";
$m[3]["nombre"]="Marcos";
$m[1]["edad"]=21;
$m[2]["edad"]=24;
$m[3]["edad"]=17;
$m[1]["altura"]=175;
$m[2]["altura"]=181;
$m[3]["altura"]=167;

$ordenar 'nombre';
$dir 'ASC';

function 
ordenar($m,$ordenar,$dir) {
    
usort($mcreate_function('$item1, $item2''return strtoupper($item1[\'' $ordenar '\']) ' . ($direccion === 'ASC' '>' '<') . ' strtoupper($item2[\'' $ordenar '\']);'));
    return 
$m;
}

$m=ordenar($m,$ordenar,$dir); 
  #5 (permalink)  
Antiguo 23/11/2007, 12:46
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años
Puntos: 17
Re: Ordenar matriz según campo

Llamás a la variable $dir y después $direccion =)
  #6 (permalink)  
Antiguo 23/11/2007, 12:57
 
Fecha de Ingreso: julio-2006
Mensajes: 50
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: Ordenar matriz según campo

jeje, gracias!
Ya me estaba pasando rollos y creyendo "mmm... quizás la función sort es sólo local" o cosas así... XD
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:39.