Foros del Web » Programando para Internet » PHP »

funciones de array posicionar puntero

Estas en el tema de funciones de array posicionar puntero en el foro de PHP en Foros del Web. Hola amigos el Foro: Tengo la siguiente consulta ayudenme por favor. Luego de hacer una consula a mi base de datos obtengo la información de ...
  #1 (permalink)  
Antiguo 13/04/2004, 10:07
Avatar de TheRock  
Fecha de Ingreso: mayo-2002
Ubicación: Sucre - Bolivia
Mensajes: 189
Antigüedad: 21 años, 10 meses
Puntos: 0
Busqueda funciones de array posicionar puntero

Hola amigos el Foro:

Tengo la siguiente consulta ayudenme por favor.

Luego de hacer una consula a mi base de datos obtengo la información de codigo y descripcion y estos datos los guardo en una varialbe de sesion $nav["objetos"].

A través de esta variable quisiera hacer una especie de navegador con mis botones de Anterior y Siguiente para poder desplasarme por esos datos asi evitar la consulta a la base de datos en cada click.

He creado mi indice con la función foreach() y con esta especie de menu accedo sin problemas de forma directa a esos datos.

Entonces lo que deseo es que si me encuentro en $nav["objetos"][15] me genere 2 links que vayan tanto al anterior registro que podria ser $nav["objetos"][2] y al siguiente $nav["objetos"][25] en base a la consulta.

Habrá alguna función que me permita posicionar el cursos del array y a través de este leer en anterior y siguiente elemento del array???.

Bueno en esa solución ando, tal ves haya una mejor forma de hacerlo.... espero sus sugerencias.

Muchas gracias.... y saludos amig@s mi@s.

  #2 (permalink)  
Antiguo 13/04/2004, 12:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si almacenases tus elementos como un array secuencial al lerlos de tu BD no tendrías problemas y podrías usar:

Si estás en tu puntero 1 .. la anterior es donde estas+1 y la posterior serà donde estas -1 (si es < 0 .. pues no hay posición anterior .. lo mismo si es > que el total count() .. de ese array ..)

Es decir ..

crear un array tipo al obtener tu consulta con tu bucle while() o el que uses típico:

Código PHP:
while($row=......)
$nav['objetos'][]=$row['campo'];

suponiendo que el indice que usas en $nav['objetos'][15] será tu valor ...

El [] expresa "indice autonumérico" comienza en 0 y se incrementa en una unidad a cada llamada (pasada de tu bucle).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 13/04/2004, 12:56
Avatar de TheRock  
Fecha de Ingreso: mayo-2002
Ubicación: Sucre - Bolivia
Mensajes: 189
Antigüedad: 21 años, 10 meses
Puntos: 0
Cluster:

Mi problema es que el indice ["23"] no sera indisado sino será el código del elemento un id, y el valor sera texto ej:

$nav["objetos"]["18"]='martillo'
$nav["objetos"]["27"]='tornillo'
$nav["objetos"]["59"]='alicate'
$nav["objetos"]["89"]='clavo'



como ves mi consulta me devolvera distintos id que serian los indices del array.

Lo que deseo es navegar a través de estos datos que pueden variar desde 1 hasta 1000 filas.

al entrar a la pagina me envio ese id, ej, para tornillo

mostrar.php?id=27

entonces con este parametro, primero quiero mostrar el contenido del elemento con id=27 ..... Tornillo, luego hacer dos links que me permitan acceder a martillo id=18 y alicate id=59.

Espero no ser my latoso e insistente.

Muchas gracias, espero tu respuesta.

Última edición por TheRock; 13/04/2004 a las 12:57
  #4 (permalink)  
Antiguo 13/04/2004, 14:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok ..
Y que tal usar un array multidimiensional tipo:

$nav["objetos"][0]['item']='martillo'
$nav["objetos"][0]["id']='27';

$nav["objetos"][1]['item']='alicate'
$nav["objetos"][1]['id']='80'

etc..

El tema es que deberías tener una variable para el control del paginado y no depender del resultado en sí de esa consulta ..

Si quieres hacerlo a tu manera usa las funciones key() y/o array_keys() para obtener la clave (indice) de un valor dado (suponiendo que no se repitan ..)

-----

Cambiando el tema .. Creo que es más versatil un sistema de paginado por consultas SQL donde se limitan el nº de registros entregados que el hacer la consulta integra de N registros que te pueda arrojar esa consulta y moverte por un enorme array.

Al limitar las consultas SQL que entregas (en Msyql puedes usar LIMIT para gestionar el paginado) sólo obtienes los X registros que se están visualizando .. una consulta rápida. La única consulta extra que debes hacer es la de contar el total de registros que arroje la consulta realizada .. pero para eso y para conseguir mayor velocidad para ese punto se usa más SQL (en Msyql por ejemplo tienes COUNT() ).

Piensatelo .. unas consultas "limitadas" de más a tu BD consumiran menos recursos que moverte entre esos arrays que vas a tener que gestionar. Además que al leer los datos directamente de tu BD, siempre estarán actualizados ante cualquier borrado/actualización de algún registro que esté en la consulta que vas a realizar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 13/04/2004, 15:22
Avatar de TheRock  
Fecha de Ingreso: mayo-2002
Ubicación: Sucre - Bolivia
Mensajes: 189
Antigüedad: 21 años, 10 meses
Puntos: 0
Gracias Cluster:

Realmente eres a todo dar, muchas gracias por tu sugerencia y ayuda, lo tomare muy en cuenta, pues con la primera alternativa que me diste lo resolvi.

Por otra parte creo que exagere cuando puse los rangos de 1 a 1000, en realidad son pequeños y los necesito ademas para generar un indice en cada página, entonces esto me aliviana el tener que hacer la misma consulta a la Base de datos en cada página.

Muchas gracias amigo y suerte en todo.

bye
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 18:59.