Foros del Web » Programando para Internet » PHP »

Array en php (orden)

Estas en el tema de Array en php (orden) en el foro de PHP en Foros del Web. Hola, no encuentro lo que quiero hacer, a ver si alguien ya lo hizo. Dada una array por ejemplo: $regiones=array("murcia","asturias","valencia","ma drid"); 0=murcia,1=asturias,... Quiero ordenarla a ...
  #1 (permalink)  
Antiguo 21/09/2011, 08:36
 
Fecha de Ingreso: diciembre-2010
Mensajes: 22
Antigüedad: 14 años
Puntos: 2
Pregunta Array en php (orden)

Hola, no encuentro lo que quiero hacer, a ver si alguien ya lo hizo.


Dada una array por ejemplo:

$regiones=array("murcia","asturias","valencia","ma drid");

0=murcia,1=asturias,...

Quiero ordenarla a placer, por ejemplo pasar "valencia" a ser la primera, osea la 0, y que las demás modificaran su valor, terminando:

0=valencia,1=murcia,...

Seguramente sera una tonteria pero no lo veo...
  #2 (permalink)  
Antiguo 21/09/2011, 08:41
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Array en php (orden)

Es muy sencillo:

Código PHP:
Ver original
  1. $nombres = array('Juan', 'Pedro', 'Pepe');
  2. sort($nombres)

Existe otro pero es para arreglos asociativos:

Código PHP:
Ver original
  1. $miArray = array('b'=>1, 'a'=>2, 'c'=>3);
  2. asort($miArray);

Organiza segun el valor de la clave pero mantiene los indices de cada valor.

Espero te sirva de ayuda.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 21/09/2011, 08:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 22
Antigüedad: 14 años
Puntos: 2
Respuesta: Array en php (orden)

El problema que sort() los ordena alfabéticamente, yo quiero ordenarlos según las preferencias de cada usuario.

Con sort() pondría "asturias" la primera.
Yo necesito que puedas ordenarlas como desees, pero gracias por contestar.
  #4 (permalink)  
Antiguo 21/09/2011, 08:57
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Array en php (orden)

Cita:
Iniciado por Carceles Ver Mensaje
El problema que sort() los ordena alfabéticamente, yo quiero ordenarlos según las preferencias de cada usuario.

Con sort() pondría "asturias" la primera.
Yo necesito que puedas ordenarlas como desees, pero gracias por contestar.
Pues la verdad no se a que te refieres como el usuario quiera, de todas formas te digo cuales son las funciones para ordenar un array y tu miras cual te sirve:

sort()
rsort()
ksort()
krsort()
asort()
arsort()
natsort()

Aquí te muestran para que sirve cada uno con un ejemplo y explicacion.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #5 (permalink)  
Antiguo 21/09/2011, 09:08
 
Fecha de Ingreso: diciembre-2010
Mensajes: 22
Antigüedad: 14 años
Puntos: 2
Respuesta: Array en php (orden)

ok jotaincubus, gracias, estoy viendo ahora [URL="http://www.php.net/manual/es/function.array-unshift.php"]array_unshift[/URL] con esta función puedo crear un valor como primera de la array, y si luego la borro la original parecerá que la he ordenado.

Solo lo había preguntado por si alguien tuvo ese problema, intentare sacarlo poco a poco, gracias.
  #6 (permalink)  
Antiguo 21/09/2011, 10:52
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Array en php (orden)

Mira a ver si así te sirve para ordenarlo como quieres.
Código PHP:
Ver original
  1. <?php
  2. $regiones = array('murcia', 'asturias', 'valencia', 'madrid');
  3. $orden = array(2,0,1,3);
  4.  
  5. foreach ($orden as $o) {
  6.     $n_regiones[] = $regiones[$o];
  7. }
  8.  
  9. echo '<pre>';
  10. print_r($n_regiones);
  11. echo '</pre>';

Array
(
[0] => valencia
[1] => murcia
[2] => asturias
[3] => madrid
)
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 21/09/2011, 10:56
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Array en php (orden)

Existen las funciones uasort, uksort y usort que permiten definir una función de comparación a utilizar como criterio de comparación.

http://www.php.net/manual/es/function.uasort.php

http://www.php.net/manual/es/function.uksort.php

http://www.php.net/manual/es/function.usort.php

Te interesan para tu caso uksort o usort. Uasort no te sirve porque mantiene la asociación entre clave y valor (es decir, si asturias tiene el índice 0, este seguiría siendo 0 al ordenar).

Te dejo un ejemplo con una comparación sencilla, pero se puede complicar tanto como quieras:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function cmp($a, $b)
  4. {
  5.     if ($a == $b) {
  6.         return 0;
  7.     }
  8.     return ($a > $b) ? -1 : 1;
  9. }
  10.  
  11. $a = array("santiago","asturias", "madrid", "leganes", "mallorca");
  12.  
  13. usort($a, "cmp");
  14.  
  15. foreach ($a as $clave => $valor) {
  16.     echo "$clave: $valor\n";
  17. }
  18.  
  19.  
  20. ?>
  #8 (permalink)  
Antiguo 21/09/2011, 11:16
 
Fecha de Ingreso: diciembre-2010
Mensajes: 22
Antigüedad: 14 años
Puntos: 2
Respuesta: Array en php (orden)

Gracias por las respuestas, ya lo saqué todo perfecto.

Si alguien tiene el mismo problema os explico un poco, aunque mi caso es un poco particular.

En el navegador se vería algo así pero no tan feo:

Asturias Bajar Subir Primero Ultimo
Murcia Bajar Subir Primero Ultimo
Valencia Bajar Subir Primero Ultimo
Madrid Bajar Subir Primero Ultimo

Esta tabla viene de una array que cojo de una base de datos:

$sql="SELECT preferencias FROM por_user WHERE id='".$_SESSION['id']."'";

//Dividiendo este valor con un explode saco la array;

Código PHP:
//Su pulso Primera me pone el valor en primera posicion
if($_GET['primera']!=""){//Poner en 1er puesto
    
$dato=$diario[$_GET['primera']];
    unset(
$diario[$_GET['primera']]);
    
array_unshift($diario$dato);
    
$count=(count($diario)-1);
    for( 
$n=0$n $count$n++ ) {
        
$value.=$diario[$n]."--";
    }
    
$sql="UPDATE por_user SET  preferencias='".$value."' WHERE id=".$_SESSION['id']."";//actualizo la base de datos
    
mysql_query($sql);
    } 

Las demás es más fácil, por ejemplo bajar seria:
Código PHP:
if($_GET['bajar']!=""){//Poner Un puesto abajo
    
$datasube$diario[$_GET['bajar']];
    
$databaja$diario[$_GET['bajar']+1];
    
$diario[$_GET['bajar']+1] =  $datasube;
    
$diario[$_GET['bajar']] =  $databaja;
    
$diario array_values($diario);
    
$count=(count($diario)-1);
    for( 
$n=0$n $count$n++ ) {
        
$value.=$diario[$n]."--";
    }
    
$sql="UPDATE por_user SET  preferencias='".$value."' WHERE id=".$_SESSION['id']."";
    
mysql_query($sql);
    } 
Funciona perfecto pero falta perfeccionar un poco , limpiar el código y simplificar, pero nada, ya esta solucionado!

Un saludo.
  #9 (permalink)  
Antiguo 21/09/2011, 11:19
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 7 meses
Puntos: 344
Respuesta: Array en php (orden)

Tendrías que haber empezado por ahí. Lo que tu quieres no es ordenar un array, es que el usuario pueda indicar en que posición se encuentran los datos.

Etiquetas: ordenacion
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

SíEste tema le ha gustado a 1 personas




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