Foros del Web » Programando para Internet » PHP »

seleccionar siguiente elemento y anterior en un array

Estas en el tema de seleccionar siguiente elemento y anterior en un array en el foro de PHP en Foros del Web. Hola: Estoy algo perdido llevo horas dandome cabezazos y no encuentro la solucion, a ver si me podeis echar una mano... Resulta que tengo una ...
  #1 (permalink)  
Antiguo 20/04/2012, 07:10
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
seleccionar siguiente elemento y anterior en un array

Hola:

Estoy algo perdido llevo horas dandome cabezazos y no encuentro la solucion, a ver si me podeis echar una mano...

Resulta que tengo una consulta que lanza un array con los nombres de usuario de mi mysql...

pongamos:

a-aaa-Alido-bas-black-erizo-filete-final-firmo66-fuck_yeah-

y un largo etc...

Bueno supongamos que estamos en el perfil de final, lo que busco es como conseguir el siguiente item del array, osea firmo66 y tambien el anterior filete

no puedo hacerlo por id en la mysql porque los ordeno alfabeticamen te y quiero que muestr el siguiente o el anterior pero alfabeticamante...

alguna idea????


Código PHP:
Ver original
  1. $username="korn";
  2. $artistFocus="-$username-";
  3.  
  4. function nextArtist(){
  5.   $output = "";
  6.  
  7. $sql = "SELECT username FROM usuarios WHERE confirmcode='done' ORDER BY username";
  8. $result = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
  9.   while($row = mysql_fetch_array($result)){
  10.     $output.= "-$row[username]-";
  11.   }
  12.  
  13.   return $output;
  14. }
  15.  
  16. $mivariable = nextArtist();
  17. $endChain= "-esteeselprincipiodelalista-$mivariable-esteeselfinaldelalista-";
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #2 (permalink)  
Antiguo 20/04/2012, 07:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: seleccionar siguiente elemento y anterior en un array

Si tienes un arreglo puedes acceder a los índices numéricos:
Código PHP:
$pos 4;
$left $foo[$pos 1];
$center $foo[$pos];
$right $foo[$pos 1]; 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 20/04/2012, 07:23
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: seleccionar siguiente elemento y anterior en un array

No entendi muy bien, segun tu codigo, vos con el metodo nextArtist() queres devolver el artista anterior y posterior a la variable $username que en este caso es korn?

No entiendo el poque traer todo concatenado con guiones
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #4 (permalink)  
Antiguo 20/04/2012, 07:25
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

Hola amigo gracias por responder... no eniendo muy bien lo que me comentas, como puedo saber la posicion de cada uno de los elementos que contiene el array?

habia prbado esto tb, mira te pongo el codigo...

Código PHP:
Ver original
  1. <?
  2. $pizza  = "*aaa*Alido*bas*black*erizo*filete*final*firmo66*fuck_yeah*kk*jj*";
  3. $trozos = explode("*", $pizza);
  4.  echo $trozos[4];
  5.  $arresult = count($trozos);
  6.  echo $arresult-2;
  7.  ?>

y claro asi puedo sacar los nombres, el detalle es que no se como determinar que numero es cada uno!

Aaaaaaaaaahhhh ayudaaaaa jejeje, no en serio me duele el tarro, llevo 4 horas dando vueltas como un gilipollas!
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #5 (permalink)  
Antiguo 20/04/2012, 07:27
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

Hola Linuxzero, es ue habia intentado cortar la cadena mediante strpos, pero lo desestime, son residuos, realmente no haria falta , perdona la suciedad es que llevo muchas horas y he probado todo y rebuscado pero na!
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #6 (permalink)  
Antiguo 20/04/2012, 07:32
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: seleccionar siguiente elemento y anterior en un array

para saber en que posicion esta cierto valor del vector podes usar el metodo array_search()

http://php.net/manual/es/function.array-search.php

Este es un ejemplo de la pagina

Código PHP:
Ver original
  1. <?php
  2. $matriz = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
  3.  
  4. $clave = array_search('green', $matriz); // $clave = 2;
  5. $clave = array_search('red', $matriz);   // $clave = 1;
  6. ?>

Entonces despues sabiendo la posicion del artista que queres, te manejas con la posicion +1 -1 del vector para acceder al anterior y siguiente, siempre y cuando tengas uno antes o despues, eso lo vas a tener que validar, en caso de que sea el primer o el ultimo elemento del vector.

Saludos
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #7 (permalink)  
Antiguo 20/04/2012, 07:43
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

... pero si el array viene de mysql como puedo saber el numero que le corresponde al usuario en cuestion, haber me explico:

Si tengo estos valores, *aaa*Alido*bas*black*erizo*filete*final*firmo66*fu ck_yeah*kk*jj*

y pongamos que me ecuentro en el perfil de erizo, como puedo saber que numero de array tiene erizo ???

volviendo al codigo de antes...

Código PHP:
Ver original
  1. <?
  2. $pizza  = "*aaa*Alido*bas*black*erizo*filete*final*firmo66*fuck_yeah*kk*jj*";
  3. $trozos = explode("*", $pizza);
  4.  echo $trozos[4];
  5.  ?>

Esto me sacaria el valor de bLack... y si en el boton le pongo href="loquesea<?echo$trozo[5];?>.html" me sacara la pagina de erizo, pero como puedo saber el valor actual de $trozo[aquiquenumero?]; para restarle o sumarle....

Es que no lo veo
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #8 (permalink)  
Antiguo 20/04/2012, 07:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: seleccionar siguiente elemento y anterior en un array

Creo que no entiendes, primero debes construir un array a partir de tus resultados de la consulta, no directamente.

Luego usas array_search() como te han dicho para localizar el índice correcto.

Finalmente y con un poco de aritmética básica sumas o restas el índice para obtener el anterior y siguiente.

Reflexiona y lee bien todas las respuestas del tema, ahí tienes la solución.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 20/04/2012, 07:49
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

Ah osea que no vale con el array sacado a pelo de mysql...ah joder ok! entonces mi planteamiento estaba mal de base! ok ok
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #10 (permalink)  
Antiguo 20/04/2012, 08:00
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: seleccionar siguiente elemento y anterior en un array

Cita:
Iniciado por protoameeba Ver Mensaje
Ah osea que no vale con el array sacado a pelo de mysql...ah joder ok! entonces mi planteamiento estaba mal de base! ok ok
no, no sirve porque el array que te devuelve el mysql no es de otro tipo de dato, no de resultados crudos, sino de resultados del mysql, entonces el array_search() asi como esta no te funcionaria. Tenes que generarlo limpio previamente como dijo pateketrueke
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #11 (permalink)  
Antiguo 20/04/2012, 08:12
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

psss nada tios lo siento por la pesadez pero nasti de plasti!

podriais ponerme un ejemplo pa niños pequeños, de como se construye un array asociativo...asi ya me lo prendo es que no lo veo!

es que no entiendo como asociarle un numero a los usuarios en un Select de mysql... sorry!
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #12 (permalink)  
Antiguo 20/04/2012, 08:13
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

y no sera por no darle vueltas, llevo desde las 10 y 30 y son las 16:11...
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #13 (permalink)  
Antiguo 20/04/2012, 08:16
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: seleccionar siguiente elemento y anterior en un array

Deja el sql como esta, solo tenes que hacer esto, segun tu ejemplo anterior:

Código PHP:
Ver original
  1. <?php
  2. $listaUsuarios  = "*aaa*Alido*bas*black*erizo*filete*final*firmo66*fuck_yeah*kk*jj*";
  3. $usuarios = explode("*", $listaUsuarios);
  4. $clave = array_search("black", $usuarios);
  5. echo $clave . "<br />"; // esto te va a devolver 3, ya que el explode formula un array y black se encuentra en la posicion 0, entonces, sabiendo esto podemos hacer lo siguiente:
  6. echo $usuarios[$clave - 1] . "<br />"; // Te va a devolver el usuario "bas"
  7. echo $usuarios[$clave] . "<br />"; // Te va a devolver el usuario "black"
  8. echo $usuarios[$clave + 1] . "<br />"; // Te va a devolver el usuario "erizo"
  9. ?>
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #14 (permalink)  
Antiguo 20/04/2012, 08:20
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

Gracias compi! lo he probado y tira... me voy a dar una ducha a ver si espabilo y ne pongo a ENTENDERLO! en cuanto tenga todo el berengenal arreglado subo el codigo para si le sirve a alguien! MUCHAS GRACIAS MAN!
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #15 (permalink)  
Antiguo 20/04/2012, 08:21
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: seleccionar siguiente elemento y anterior en un array

Cita:
Iniciado por protoameeba Ver Mensaje
Gracias compi! lo he probado y tira... me voy a dar una ducha a ver si espabilo y ne pongo a ENTENDERLO! en cuanto tenga todo el berengenal arreglado subo el codigo para si le sirve a alguien! MUCHAS GRACIAS MAN!
De nada campeon!!, suerte con eso
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #16 (permalink)  
Antiguo 20/04/2012, 09:45
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: seleccionar siguiente elemento y anterior en un array

Bueno una vez mas gracias a Linuxzero por la ayuda prestada si no aun estaria dandome cabezazos contra la pantalla:

dejo el codigo por si a alguien le ayuda... ahora hay que maquetarlo/diseñarlo ponerlo "gonico":

Código PHP:
Ver original
  1. <?
  2. $username="korn";
  3. $artistFocus="$username";
  4.  
  5. include ("conection.php");
  6.  
  7. function nextArtist(){
  8. $output = "";
  9. $sql = "SELECT username FROM usuarios WHERE confirmcode='done' ORDER BY username";
  10. $result = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
  11. while($row = mysql_fetch_array($result))
  12. {
  13. $output.= "*$row[username]";
  14. }
  15. return $output;
  16. }
  17.  
  18. $loadArtist = nextArtist();
  19. $listaUsuarios= "*esteeselprincipiodelalista".$loadArtist."*esteeselfinaldelalista*";
  20.  
  21. echo $listaUsuarios;
  22.  
  23.  
  24. $allUsers = explode("*", $listaUsuarios);
  25. $keyFocus = array_search($artistFocus, $allUsers);
  26. if ($allUsers[$keyFocus - 1]=='esteeselprincipiodelalista')
  27. {
  28. echo "aqui no hay boton, que lo sepas";
  29. }
  30.     else
  31.     {
  32.     echo "<a href='http://www.tudireccion.com/".$allUsers[$keyFocus - 1]."'>anterior</a><br/>";
  33.     }
  34.  
  35. if ($allUsers[$keyFocus + 1]=='esteeselfinaldelalista')
  36. {
  37. echo "aqui no hay boton, que lo sepas";
  38. }
  39.     else
  40.     {
  41.     echo "<a href='http://www.tudireccion.com/".$allUsers[$keyFocus + 1]."'>siguiente</a><br/>";
  42.     }
  43.  
  44. ?>


Un saludo!

Seguro que se puede depurar hasta el infinito, pero yo tengo la cabeza como un bombo...
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....

Etiquetas: elemento, mysql, siguiente, sql, variables, usuarios, anteriores
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 06:15.