Foros del Web » Programando para Internet » PHP »

rotar valores de un array

Estas en el tema de rotar valores de un array en el foro de PHP en Foros del Web. Hola! Tengo un problema con un codigo tonto con arrays. Supongamos que tengo el siguiente array y una variable cuyo valor es uno de los ...
  #1 (permalink)  
Antiguo 09/07/2011, 16:31
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
rotar valores de un array

Hola! Tengo un problema con un codigo tonto con arrays.


Supongamos que tengo el siguiente array y una variable cuyo valor es uno de los 4 valores de ese array.

Código PHP:
Ver original
  1. $valor = $_POST['valor'];
  2. $arr=array('nombres','direcciones','telefonos','edades');

Lo que quiero hacer es que cuando se elija uno de los 4 valores, éste pase a ser el primer elemento de ese array y le sigan los demas, rotados.

Por ejemplo si el array original es el anterior y $valor = 'telefonos', que el array quede como:

Código PHP:
Ver original
  1. $arr=array('telefonos','edades','nombres','direcciones');
  #2 (permalink)  
Antiguo 09/07/2011, 16:45
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: rotar valores de un array

¿a que se debe esto? lo pregunto porque por ahi hay otra solucion a tu problema.
Para que quede primero tenes que hacer un bucle en el cual asigne primero el valor que vos elijas y después los demás
  #3 (permalink)  
Antiguo 10/07/2011, 03:35
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: rotar valores de un array

Es para un select option de pestañas. Quiero que siempre aparezca la pestaña de la pagina actual como primera pestaña y luego, en el mismo orden, las demas.

Lo que me comentas es logico y bastante facil de conseguir, pero el problema lo encuentro cuando el array llega a su ultimo valor y debo cogerlos luego desde el primer valor.
  #4 (permalink)  
Antiguo 10/07/2011, 07:15
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: rotar valores de un array

Lo acabo de hacer pero he utilizado muchas variables, creo.

Hay alguna manera de reducir un poco el numero de variables??

Código PHP:
Ver original
  1. //$tipo es la variable que pide el usuario, la que contiene uno de los valores del array $tit.
  2.  
  3. $tit = array('nmb','dir','tel','eda');
  4.  
  5. $j=0;
  6. while($tit[$j]!=$tipo)
  7.     {$j++;}
  8.  
  9. $ntit=array(4);
  10. $n=0;
  11. if($j>0)
  12.     {
  13.     for($i=3;$i>=0;$i--)
  14.         {
  15.         $k=$i-$j;
  16.         if($k<0)
  17.             {
  18.             $m=3-$n;
  19.             $ntit[$m]=$tit[$i];
  20.             $n++;
  21.             }
  22.         else
  23.             {$ntit[$k]=$tit[$i];}
  24.         }
  25.     }
  26. else
  27.     {$ntit=$tit;}
  #5 (permalink)  
Antiguo 10/07/2011, 07:37
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: rotar valores de un array

haber vos decis que es un select verdad?
y tenes este array: $tit = array('nmb','dir','tel','eda');
cuando el usuario seleciona un value vos queres que ese valor quede seleccionado y luego le siga el resto.

es asi?

me gustaria saber cual es el valor que elige el usuario.
var_dump($_REQUEST); para ver el valor
  #6 (permalink)  
Antiguo 10/07/2011, 10:18
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: rotar valores de un array

El usuario elige un valor 'cualquiera' dentro de 4 posibles. Antes de ese codigo tengo un codigo previo para la primera vez que se ejecuta la pagina.
Código PHP:
Ver original
  1. <?php
  2. if(!isset($_POST['tipo']))
  3.     {$tipo = 'nmb';}
  4. else
  5.     {$tipo = $_POST['tipo'];}
  6. ?>
  #7 (permalink)  
Antiguo 10/07/2011, 11:11
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: rotar valores de un array

Hola,

Una de las características de PHP es la cantidad de funciones predefinidas que tiene para el manejo de arrays. Muchas veces yo mismo me veo escribiendo código basado en ciclos y variables, pero es únicamente cuando el lenguaje no tiene ya una mejor metodología.

Como en este caso, para buscar el índice usa 'array_search', esta función te devuelve el 'key' donde está ubicado el valor dentro del arreglo o false si no lo encuentra (en este caso las llaves son los índices puesto que no estas usando 'keys').

Si lo encontró entonces usa la función 'range' que te devuelve una porción del arreglo, lógicamente tienes que usarla dos veces para separar el arreglo en dos partes. Por último usa la función 'array_merge' para unir las dos partes del arreglo en una sola, lógicamente tienes que unir la segunda parte de primero para rotar los valores.

Posiblemente existe otro método mas simple,

Saludos,
  #8 (permalink)  
Antiguo 10/07/2011, 11:20
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: rotar valores de un array

Cita:
Iniciado por oms02 Ver Mensaje
Es para un select option de pestañas. Quiero que siempre aparezca la pestaña de la pagina actual como primera pestaña y luego, en el mismo orden, las demas.

Lo que me comentas es logico y bastante facil de conseguir, pero el problema lo encuentro cuando el array llega a su ultimo valor y debo cogerlos luego desde el primer valor.
Podes poner un selected para seleccionar una option del select

http://www.htmlcodetutorial.com/form..._SELECTED.html
  #9 (permalink)  
Antiguo 10/07/2011, 11:46
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: rotar valores de un array

Cita:
Iniciado por marcofbb Ver Mensaje
Podes poner un selected para seleccionar una option del select
Pero entonces el problema esta en que no siguen el orden adecuado.
  #10 (permalink)  
Antiguo 10/07/2011, 11:47
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: rotar valores de un array

Cita:
Iniciado por oms02 Ver Mensaje
Pero entonces el problema esta en que no siguen el orden adecuado.
Tenes por ejemplo

- Home (este va a ser el default)
- Programas
- Tutoriales

el usuario entra a Programas, vos queres quede

- Programas (este va a ser el default)
- Home
- Tutoriales

Y como te digo yo quedaría

- Home
- Programas (este va a ser el default)
- Tutoriales

¿Algo como el segundo estas interesado en hacerlo?
  #11 (permalink)  
Antiguo 10/07/2011, 18:28
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: rotar valores de un array

Quiero que queden asi:

pestaña1 (selected)
pestaña2
pestaña3
pestaña4

Tras darle click al 2

pestaña2 (selected)
pestaña3
pestaña4
pestaña1
  #12 (permalink)  
Antiguo 11/07/2011, 01:44
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: rotar valores de un array

Hola,

Aunque me equivoqué en usar la función 'range', aún así podrías haberlo intentando con el método que expliqué anteriormente, la función debió ser 'array_slice',

Código PHP:
<?php
$values 
= Array('A''B''C''D''E');
$value 'D';

$index array_search($value$values);
if (
$index) {
  
$i array_slice($values0$index);
  
$j array_slice($values$index);
  
$values array_merge($j$i);
}

print_r($values);
?>
En tu caso el 'selected' siempre va a ser el primero después de rotar los valores,
Saludos,
  #13 (permalink)  
Antiguo 11/07/2011, 18:12
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: rotar valores de un array

Hola HackmanC.

Lo habia intentado sin exito pero ahora funciona perfecto. Muchas gracias!!
  #14 (permalink)  
Antiguo 11/07/2011, 19:53
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: rotar valores de un array

Hola,

Cita:
Iniciado por oms02 Ver Mensaje
Hola HackmanC.

Lo habia intentado sin exito pero ahora funciona perfecto. Muchas gracias!!
Por nada,

Saludos,

Etiquetas: rotar, variables
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:09.