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. Buenas tardes.. tengo un problema para ordenar datos de un array, nose si se podrá hacer.. Código PHP: $array [ 0 ][ 'A' ] =  10 ...
  #1 (permalink)  
Antiguo 08/06/2009, 17:28
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Pregunta Ordenar Array Multidimensional

Buenas tardes..
tengo un problema para ordenar datos de un array, nose si se podrá hacer..

Código PHP:
$array[0]['A'] = 10;
$array[1]['A'] = 5;
$array[2]['A'] = 50

lo que quisiera hacer yo, es a partir de una variable $A(que contiene un número) ordenar los datos del array.
Ésto seria algo asi:

Código PHP:
$A 40;

// tendria que ordenar los datos según la cercanía a la variable
//y el resultado tendria que ser que al imprimir el array los datos sean:
// 50
// 10
// 5 

hay forma de hacerlo..?

Muchas gracias de antemano
__________________
Recuerda usar el highlight para mostrar código
mauricioblint.com
  #2 (permalink)  
Antiguo 08/06/2009, 19:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ordenar Array Multidimensional

Claro, PHP tiene una función llamada array_multisort que sirve especificamente para casos como el que expones.

Saludos.
  #3 (permalink)  
Antiguo 08/06/2009, 21:17
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar Array Multidimensional

Muchas Gracias GatorV..
tengo un problema, no se como aplicar el array_multisort, haber si me das una mano más..

Código PHP:
while( $row mysql_fetch_array($sql) ){
$datos[$i]['id']= $row['id'];
$datos[$i]['dni']= $row['dni'];
$datos[$i]['n']= $restaA $restaB

como lo aplico para ordenar los demás campos en base a
Código PHP:
$datos[$i]['n'
??


Muchas Gracias!
__________________
Recuerda usar el highlight para mostrar código
mauricioblint.com
  #4 (permalink)  
Antiguo 08/06/2009, 21:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ordenar Array Multidimensional

Si ves en los ejemplos, tendrías que pasar un array con los datos a ordenar en un array solo y luego pasar el array $datos al final para mantener los indices.

Saludos.
  #5 (permalink)  
Antiguo 09/06/2009, 08:51
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar Array Multidimensional

Buenos Dias..
estuve leyendo bastante pero no lo puedo hacer correr.. los ejemplos son con foreach o distintos a como lo tengo yo.. haber si me puedes dar una mano más..

yo lo genero con un while:

Código PHP:
while( $row mysql_fetch_array($sql) ){
$datos[$i]['id']= $row['id'];
$datos[$i]['dni']= $row['dni'];
$datos[$i]['n']= $restaA $restaB;
$i++;
}

array_multisort($datos[2], SORT_ASC$datos); 
pero no lo puedo hacer andar.. quisiera ordenar los datos en base a $datos[$i]['n']


Muchas gracias, disculpá la molestia..
__________________
Recuerda usar el highlight para mostrar código
mauricioblint.com
  #6 (permalink)  
Antiguo 09/06/2009, 09:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ordenar Array Multidimensional

No, si te fijas necesitas pasar primero tus datos de tu matriz a un array normal (los que quieres ordenar), y posteriormente usar array_multisort para ordenarlos y pasarle como último parámetro $datos para mantener los indices / asociación.

Saludos.
  #7 (permalink)  
Antiguo 09/06/2009, 09:23
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar Array Multidimensional

Haber si te comprendo..
debería pasar la matriz a un array comun..algo asi?

Código PHP:
$array = array(0,'id','dni','n'); 

no entiendo muy bien como tengo que hacer..
__________________
Recuerda usar el highlight para mostrar código
mauricioblint.com
  #8 (permalink)  
Antiguo 09/06/2009, 09:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ordenar Array Multidimensional

No, tu matriz esta bien, pero lo que debes de ordenar es un arreglo lineal, por eso si ves los ejemplos, cuando van a ordenar por algún campo lo pasan a un array lineal y luego usan el multisort.

Saludos.
  #9 (permalink)  
Antiguo 09/06/2009, 18:08
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 5 meses
Puntos: 23
Respuesta: Ordenar Array Multidimensional

Buenas Noches..
GatorV sigo sin darle con la tecla..


haber si entiendo.. sino te voy a pedir por favor que me postées un código de ejemplo..

Código PHP:
while( $row mysql_fetch_array($sql) ){
$datos[$i]['id']= $row['id'];
$datos[$i]['dni']= $row['dni'];
$datos[$i]['n']= $restaA $restaB;
$i++;

tendría que quedarme segun lo que me dijiste:

Código PHP:
while( $row mysql_fetch_array($sql) ){
$datos[$i] = array($row['id'],$row['dni'],$n);
$i++;
}
array_multisort($datos[3], SORT_ASC$datos); // para ordenar por $n (que es un número) 

Gracias nuevamente..
__________________
Recuerda usar el highlight para mostrar código
mauricioblint.com
  #10 (permalink)  
Antiguo 09/06/2009, 19:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ordenar Array Multidimensional

No, ve los ejemplos del manual, necesitas un array lineal sobre el que vas a ordenar los datos, y por ultimo la matriz de datos para preservar los valores, ve el ejemplo del manual:
Array de ejemplo:
Código php:
Ver original
  1. <?php
  2. $data[] = array('volume' => 67, 'edition' => 2);
  3. $data[] = array('volume' => 86, 'edition' => 1);
  4. $data[] = array('volume' => 85, 'edition' => 6);
  5. $data[] = array('volume' => 98, 'edition' => 2);
  6. $data[] = array('volume' => 86, 'edition' => 6);
  7. $data[] = array('volume' => 67, 'edition' => 7);
  8. ?>
Ordenando por volume y por edition:
Código php:
Ver original
  1. <?php
  2. // Transformar a columnas lineales
  3. foreach ($data as $key => $row) {
  4.     $volume[$key]  = $row['volume'];
  5.     $edition[$key] = $row['edition'];
  6. }
  7. array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
  8. ?>

Saludos.
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 20:35.