Foros del Web » Programando para Internet » PHP »

Ordenar array multidimensional

Estas en el tema de Ordenar array multidimensional en el foro de PHP en Foros del Web. Hola a todos!!, He estado leyendo sobre el ordenamiento de arrays del php, ya que requiero ordenar uno multidimensional, mi arreglo es como sigue: $_SESSION['hoteles']['hotelname'][]= ...
  #1 (permalink)  
Antiguo 12/07/2010, 15:23
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 8 meses
Puntos: 1
Ordenar array multidimensional

Hola a todos!!,

He estado leyendo sobre el ordenamiento de arrays del php, ya que requiero ordenar uno multidimensional, mi arreglo es como sigue:

$_SESSION['hoteles']['hotelname'][]= $hotelnombre;
$_SESSION['hoteles']['ciudad'][]=$ciudad;
$_SESSION['hoteles']['ubicacionid'][]=$ubicacion;
$_SESSION['hoteles']['tarifa'][]=$tarifa;

y necesito ordenarlo de acuerdo a la tarifa de la menor a la mayor, he intentado haciendo:

natsort($_SESSION['hoteles']['tarifa']);

pero me marca error, creo no es la forma correcta de aplicar la función de ordenamiento, pero no encuentro cómo.

Desde ya gracias!!
  #2 (permalink)  
Antiguo 12/07/2010, 15:45
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 16 años, 3 meses
Puntos: 105
Respuesta: Ordenar array multidimensional

seria sencillo creo poner en google: ordenar array bidimensional en php

Se debe usar la funcion usort... En la misma web de php hay ejemplos: http://php.net/usort

Mas bien... tu arreglo lo veo fatal... seria mejor algo asi:
Código PHP:
Ver original
  1. <?php
  2. $hoteles = array();
  3. $hoteles[] = array("hotelname"=>$hotelnombre, "ciudad"=>$ciudad, "ubicacionid"=>$ubicacion, "tarifa"=>$tarifa);
  4. //..... otros hoteles .....
  5. function cmp($a, $b){
  6.     return strcmp($a["tarifa"], $b["tarifa"]);
  7. }
  8. usort($hoteles, "cmp");
  9. while(list($key, $value) = each($hoteles)) {
  10.     echo "$hoteles[$key]: ".$value["tarifa"]."<br />";
  11. }
  12. $_SESSION['hoteles'] = $hoteles; //al ultimo recien guardas el arreglo bidimensional en una session.
  13. ?>

Suerte y gracias por el karma
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 12/07/2010, 15:45
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Respuesta: Ordenar array multidimensional

Hola puedes crear una función auxiliar para realizar tu comparación y despues usar usort :)

Código PHP:

function cmp($a$b)
{
    if (
$a['tarifa'] == $b['tarifa']) {
        return 
0;
    }
    return (
$a['tarifa'] < $b['tarifa']) ? -1;

Despues lo usas así..

Código PHP:
usort($_SESSION['hoteles'],'cmp'); 
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #4 (permalink)  
Antiguo 13/07/2010, 09:53
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 8 meses
Puntos: 1
Respuesta: Ordenar array multidimensional

Gracias masterojitos y _SSX,

gracias masterojitos por la sugerencia en el manejo de mis arreglos.

Y el carma más que merecido :)

Solo q tengo un detalle, me ordena los resultados pero cuando hay valores como:

1123, 10145, 2243,10892,

el orden que devuelve es:

10145, 10892, 1123, 2243

y debería ser:

1123, 2243, 10145, 10892

debo hacer algo extra, o cambiar de instrucción para ordenar??
  #5 (permalink)  
Antiguo 14/07/2010, 11:55
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 16 años, 3 meses
Puntos: 105
Respuesta: Ordenar array multidimensional

si revisabas bien la web de php la funcion usort, te da la solucion para tu caso con valores numericos.

la funcion cmp, quedaria asi:
Código PHP:
Ver original
  1. function cmp($a, $b){
  2.     return ($a["tarifa"] < $b["tarifa"]) ? -1 : (($a["tarifa"] > $b["tarifa"]) ? 1 : 0);
  3. }

y aca te pongo todo el codigo completo con ejemplos.....

Código PHP:
Ver original
  1. <?php
  2. $hoteles = array();
  3. //$valores = array("a", "c", "b", "e", "d"); //PARA VALORES ALFABETICOS
  4. $valores = array(1123, 10145, 2243, 10892, 2243); //PARA VALORES NUMERICOS
  5. for($i=0;$i<5;$i++){
  6.     $hoteles[] = array("hotelname"=>"hotelnombre$i", "ciudad"=>"ciudad$i", "ubicacionid"=>"ubicacion$i", "tarifa"=>$valores[$i]);
  7. }
  8. function cmp($a, $b){
  9.     //return strcmp($a["tarifa"], $b["tarifa"]); //PARA VALORES ALFABETICOS
  10.     return ($a["tarifa"] < $b["tarifa"]) ? -1 : (($a["tarifa"] > $b["tarifa"]) ? 1 : 0); //PARA VALORES NUMERICOS
  11. }
  12. usort($hoteles, "cmp");
  13. //muestra de ejemplo
  14. foreach($hoteles as $key => $value){
  15.     echo $value["hotelname"]." - ".$value["ciudad"]." - ".$value["ubicacionid"]." - ".$value["tarifa"]."<br />";
  16. }
  17. $_SESSION['hoteles'] = $hoteles; //al ultimo recien guardas el arreglo bidimensional en una session.
  18. ?>

Suerte amigo y aver si me das mas karma xDDDDDD

Dios te Bendiga....
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #6 (permalink)  
Antiguo 13/10/2010, 19:48
 
Fecha de Ingreso: octubre-2010
Mensajes: 1
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ordenar array multidimensional

Hola!

Necesito ayuda.
Como puedo ordenar un arreglo bidimencional compuesto por dos filas y 15 columnas.
$arreglo[2][15];
Donde
el arreglo tiene esta forma

----------------------------------------------------------------------------
3 | 7 | 1 | 0 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
---------------------------------------------------------------------------
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---------------------------------------------------------------------------
Es decir al ordenar la priemra fila en orden ascendente que tambien se lleve
su valor correspondiente en al fila de abajo.
Para que quede algo asi.


----------------------------------------------------------------------------
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13| 14 | 15 |
---------------------------------------------------------------------------
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---------------------------------------------------------------------------
  #7 (permalink)  
Antiguo 13/10/2010, 22:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Ordenar array multidimensional

¿Algo así?
Código PHP:
Ver original
  1. <?php
  2. $array = array(
  3.     array(
  4.         1 => 1,
  5.         0 => 1,
  6.         5 => 1,
  7.         6 => 0,
  8.         10 => 0,
  9.         7 => 0,
  10.         11 => 1,
  11.         13 => 1,
  12.         14 => 0,
  13.         4 => 0,
  14.         3 => 1,
  15.         2 => 1,
  16.         8 => 0,
  17.         12 => 0,
  18.         9 => 1,
  19.     ),
  20.     array(
  21.         4 => 1,
  22.         6 => 0,
  23.         8 => 0,
  24.         10 => 1,
  25.         2 => 1,
  26.         12 => 0,
  27.         14 => 0,
  28.         1 => 0,
  29.         3 => 1,
  30.         5 => 1,
  31.         7 => 1,
  32.         9 => 0,
  33.         11 => 1,
  34.         13 => 0,
  35.         0 => 0,
  36.     )
  37. );
  38. function sortArray($arr){
  39.     ksort($arr);
  40.     return $arr;
  41. }
  42. $array = array_map('sortArray', $array);
  43. var_dump($array);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: multidimensional
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 13:16.