php duda con secuencia de números

eXtreM3

Wenas! Tengo una pregunta de cómo hacer lo siguiente. Tengo una consulta que me devuelve un listado de números (según el where), por ejemplo esta:

2 4 8 12 13 18

No hay ninguna relación entre los números, no es ninguna serie. Ahora bien, por url tengo una id, que es un número de esa lista, pongamos el 12.

Cómo hago para obtener el anterior y el siguiente de mi lista? Debería devolver anterior = 8 y siguiente = 13

Seguro que con arrays es bastante sencillo, pero nunca los he manejado y no tengo ni guarra. Alguien? :P

catalon
$id=//Id que recibes por url
$res=//resultado consulta (array con los numeros esos)
$anterior=//aqui meteremos el anterior
$siguiente=//aqui meteremos el siguiente


foreach ($res as $key=>$value){

  if ($value==$id){
    $anterior=$res[$key-1];
    $siguiente=$res[$key+1];
    break;
  }

}

3 respuestas
eXtreM3

#2 luego lo pruebo y te digo, gracias por contestar tan rapido =)

Fr4nk0

Para ahorrarte el bucle ese que dice #2, está la función array_search que te devuelve la clave del elemento buscaco en caso de éxito y false en caso contrario.

Puedes usar array_search para encontrar la clave del elemento y luego coger la clave-1 y la clave+1, comprobando que no sea ni el primero ni el último, ya que en ese caso, el primero no tiene anterior y el último no tiene posterior.

Maneja esos casos y ya está, ya luego usa el bucle de #2 o la función que te brinda php para resolver tu problema.

1 respuesta
eXtreM3

#2 funcionó ^^ Muchas gracias! Al final me ha quedado así el código

spoiler

Yasta, luego con un isset de $anterior y $siguiente pues sabes si estás en un resultado intermedio o estás en el primero o el último :P

Gracias de nuevo ;)

1 respuesta
catalon

#5 Bueno, lo escribi deprisa y sin pensar, como dice #4 hay formas mejores de hacerlo.

Creo que es mejor si lo haces asi:

    $queryNav = mysql_query("SELECT ID FROM tabla WHERE 'condiciones where' ORDER BY ID ASC");
           
while($row = mysql_fetch_row($queryNav)) { $array[] = $row[0]; } $id=$_GET['id'];//Id que recibes por url $anterior=(array_search($id,$array))-1; if ($anterior<0) $anterior=0;//En este caso no hay anterior, ergo $id es el primer valor $siguiente=(array_search($id,$array))+1; if ($siguiente>=count($array)) $siguiente=0;//En este caso no hay siguiente, ergo $id es el ultimo valor echo $anterior.' '.$siguiente;

Usuarios habituales

  • catalon
  • eXtreM3
  • Fr4nk0