Foros del Web » Programando para Internet » PHP »

Duda arrays

Estas en el tema de Duda arrays en el foro de PHP en Foros del Web. Tengo una duda sobre los arrays en php. Se pueden definir arrays utilizando $keys de la siguiente manera: $array = array(6=>5, 8=>9, 10=>8) De esta ...
  #1 (permalink)  
Antiguo 09/09/2010, 04:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 15
Antigüedad: 14 años
Puntos: 1
Duda arrays

Tengo una duda sobre los arrays en php.

Se pueden definir arrays utilizando $keys de la siguiente manera:

$array = array(6=>5, 8=>9, 10=>8)

De esta manera cuando haces:

echo $array[6] //Se imprime 5

Mi duda es la siguiente. No entiendo bien como esta internamente distribuido el array, es decir como se gestiona el mismo.
Yo veo dos posibilidades:
1)Si solo tiene tres elementos asociados a unas key que el usuario le dio, pero es posible acceder a los elementos por las posiciones en el array:

$array --> [5,9,8] //El 5 aunque tiene la key 6, su posicion en el array es la 0 y se puede acceder a el tanto si haces referencia a su key como a su posicion, pero no se como acceder a traves de la posicion en vez de por la key y es una de las dudas que tengo.

2)O si por el contrario lo que ocurre es que hay posiciones vacias hasta llegar a la key numera dada, es decir:

$array --> [0,0,0,0,0,0,5,0,9,0,8] //El array en realidad tiene 10 elementos colocados donde se indico con la key, el 5 esta en la posicion 6, el 9 en la pos 8 y el 8 en la pos 10.
  #2 (permalink)  
Antiguo 09/09/2010, 08:18
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Duda arrays

1) no puedes, porque el índice no está definido: Undefined offset, puedes usar array_keys para saber las posiciones

2) en ese caso el array tiene 10 elementos, en el caso anterior sólo 3, en php no existe el problema de los punteros debido a que esto se maneja internamente.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 09/09/2010, 09:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Duda arrays

Hola

Bueno, php te permite hacer uso de arrays tradicionales o asociativos,
del modo en que estas mencionando

Código PHP:
$array = array(6=>58=>910=>8)
echo 
$array[6]   //Se imprime 5 
es asociativo, y así funciona bien con la posibilidad 1

en cuanto a esto
Cita:
$array --> [5,9,8] //El 5 aunque tiene la key 6, su posicion en el array es la 0 y se puede acceder a el tanto si haces referencia a su key como a su posicion, pero no se como acceder a traves de la posicion en vez de por la key y es una de las dudas que tengo.
podrias acceder si haces el array de forma tradicional, es decir, así

Código PHP:
$array = array(5,9,8);
echo 
$array[0]   //Se imprime 5 
y otro modo de hacerlo es como comentas en el punto 2, dejando vacios hasta una posición que se quiera

Así, en conclusión, si quieres posiciones fijas para elementos, es mejor que uses los asociativos

Si no tienes problema en las posiciones (keys) para los elementos, usa los tradicionales

saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #4 (permalink)  
Antiguo 10/09/2010, 02:23
 
Fecha de Ingreso: mayo-2010
Mensajes: 15
Antigüedad: 14 años
Puntos: 1
Respuesta: Duda arrays

Si he entendido bien tengo que elegir entre hacer un array asociativo o un array tradicional? No puedo definir un array de la siguiente manera ($array = array(21=>5,22=>8,24=>10);), y despues intentar ir a la posicion 1 del array y coger el 8, tendria que saber la key que en este caso es 22?

¿Hay alguna forma de saber la key de una posicion en concreto? Por ejemplo, key de la posicion 1 = 22, key de la posicion 2 = 24; y asi despues hacer $array[$key]?

Es porque necesito acceder a posiciones intermedias de un array asociativo, y lo estoy haciendo con la funcion next($array), que yo entiendo que lo que hace es mover un puntero, pero claro, cuando la posicion que quiero alcanzar es la posicion 20, tengo que hacer 20 veces next($array), porque las keys asociadas a cada posicion no se corresponden con la posicion real del elemento en el array, y no se que elemento hay en la posicion 20 ni cual sera su key. ¿Hay una manera mas facil de hacer esto que planteo?

Espero haberme expresado bien y no haber liado mucho las cosas. Gracias
  #5 (permalink)  
Antiguo 10/09/2010, 06:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda arrays

existe la función key()
http://php.net/key
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 10/09/2010, 08:11
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Duda arrays

bueno, pues es tal cual lo refieres

el link que te paso pateketrueke es super, si no has visto
esa sección, pues altamente recomendada

en cuanto a lo que quieres, pues no entiendo la necesidad
puntual que tienes, porque si quisieras que por ej la posición 1 fuera 8,
pues yo haría un array tradicional y ya, pero pues debe ser
por algó más que lo necesitas así

en cuyo caso, propongo esto

Código PHP:
Ver original
  1. $array = array(21=>5,22=>8,24=>10);
  2. $i = 0;
  3. $buscar = 1;
  4. foreach( $array as $key=>$val )
  5. {
  6. //echo $key.' es '.$val.'<br>';
  7.     if( $i == $buscar )
  8.         echo $key.' es '.$val.' en pos '.$buscar;
  9.        
  10.     $i++;
  11. }

espero te sirva
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 13/09/2010, 01:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 15
Antigüedad: 14 años
Puntos: 1
Respuesta: Duda arrays

mortiprogramador, entiendo que lo que tu haces es un bucle y recorres todos los elementos para imprimir sus keys. Lo que yo me refiero es que por ejemplo en java uno puede acceder a la posicion del array sin tener que recorrerlo, tu puedes ir a la posicion 5 sin recorrer antes la 0, la 1, la 2, la 3 y la 4, haciendo simplemente a[5].
En php si le asignaste un key a los elementos no encuentro la manera de acceder a la posicion 5, independientemente de la key que tenga el elemento de esa posicion, sin recorrer antes las 4 anteriores posiciones, tal y como haces tu con foreach.
La única manera que veo de hacerlo es si asignas las key coincidiendo con la posicion del elemento, es decir al elemento de la posicion 0 le asignas la key 0, al de la 1 la key 1 y asi; pero para lo que yo quiero hacer las key deben ser diferentes a las posiciones que ocupan los elementos en el array.

LA funcion key() la he utilizado alguna vez, entiendo que te devuelve la key del elemento actual del array, pero lo que yo decia es si existe una funcion que te devuelva la key de un elemento en concreto (no necesariamente el actual) pasandole la posicion en el array de ese elemento, algo asi como getKey($pos)....

Última edición por Aledis; 13/09/2010 a las 01:56
  #8 (permalink)  
Antiguo 13/09/2010, 02:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Duda arrays

Cita:
Iniciado por Aledis Ver Mensaje
mortiprogramador, entiendo que lo que tu haces es un bucle y recorres todos los elementos para imprimir sus keys. Lo que yo me refiero es que por ejemplo en java uno puede acceder a la posicion del array sin tener que recorrerlo, tu puedes ir a la posicion 5 sin recorrer antes la 0, la 1, la 2, la 3 y la 4, haciendo simplemente a[5].
En php si le asignaste un key a los elementos no encuentro la manera de acceder a la posicion 5, independientemente de la key que tenga el elemento de esa posicion, sin recorrer antes las 4 anteriores posiciones, tal y como haces tu con foreach.
La única manera que veo de hacerlo es si asignas las key coincidiendo con la posicion del elemento, es decir al elemento de la posicion 0 le asignas la key 0, al de la 1 la key 1 y asi; pero para lo que yo quiero hacer las key deben ser diferentes a las posiciones que ocupan los elementos en el array.

LA funcion key() la he utilizado alguna vez, entiendo que te devuelve la key del elemento actual del array, pero lo que yo decia es si existe una funcion que te devuelva la key de un elemento en concreto (no necesariamente el actual) pasandole la posicion en el array de ese elemento, algo asi como getKey($pos)....

uhm, bueno, pues aquí funciona como en java
(de hecho php y java son cuasihermanos)

así, por ej:

Código PHP:
Ver original
  1. $a = array(10,54,25,64,32,48);
  2. echo $a[5]; //obteniendo 48

espero se haya aclarado el asunto
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 13/09/2010, 02:46
 
Fecha de Ingreso: mayo-2010
Mensajes: 15
Antigüedad: 14 años
Puntos: 1
Respuesta: Duda arrays

Pero eso no es un array asociativo al que le hayas asignado keys a los elementos del array, imagina que a ese array que tu has hecho le asignas keys, en vez de definirlo como tu hiciste lo defines asi:

$a = array(5=>10,6=>54,7=>25,8=>64,9=>32,10=>48);

ahora si haces echo $a[5] el resultado es 10, y no 48 como en el tuyo.
Entonces ahora no puedo acceder al elemento de la posicion 5 (el 48) sino al elemento cuya key es 5 (el 10). Y mi pregunta es, en este tipo de arrays, ¿hay alguna forma de acceder al elemento de la posicion 5 (el 48) sin necesidad de recorrer el array para averiguar la key del elemento 48 (la 10)?

Última edición por Aledis; 13/09/2010 a las 02:52
  #10 (permalink)  
Antiguo 13/09/2010, 03:10
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Duda arrays

Cita:
Iniciado por Aledis Ver Mensaje
Pero eso no es un array asociativo al que le hayas asignado keys a los elementos del array, imagina que a ese array que tu has hecho le asignas keys, en vez de definirlo como tu hiciste lo defines asi:

$a = array(5=>10,6=>54,7=>25,8=>64,9=>32,10=>48);

ahora si haces echo $a[5] el resultado es 10, y no 48 como en el tuyo.
Entonces ahora no puedo acceder al elemento de la posicion 5 (el 48) sino al elemento cuya key es 5 (el 10). Y mi pregunta es, en este tipo de arrays, ¿hay alguna forma de acceder al elemento de la posicion 5 (el 48) sin necesidad de recorrer el array para averiguar la key del elemento 48 (la 10)?
bueno, siempre vas a crearlos de ese modo o ese fue solo un ejemplo???
si es de ese modo, pues al primer key (5) le sumas la posición a la que quieras ir (ej: 5+5=10) obteniendo la posición 5 hablando en términos de lo que estas queriendo hacer

de otro modo, el ciclo que te comente

tal vez alguien tenga otra idea
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 13/09/2010, 03:15
 
Fecha de Ingreso: mayo-2010
Mensajes: 15
Antigüedad: 14 años
Puntos: 1
Respuesta: Duda arrays

Bueno eso era solo un ejemplo, las keys no tienen por que ser consecutivas. Vale, entonces si entiendo bien solo se puede acceder con el bucle y recorriendo el array, no hay ninguna forma de acceder directamente.
  #12 (permalink)  
Antiguo 13/09/2010, 03:20
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Duda arrays

uhm, bueno, que tal esta

<?php
$search_array
= array('first' => 1, 'second' => 4);
if (
array_key_exists('first', $search_array)) {
echo
"The 'first' element is in the array";
}
?>

obviamente, haciendo que imprima el valor
saludos

P.S
no, pense que esa solventaba, pero el mismo efecto
se me ocurre sin embargo que podrías hacer un arreglo bidimensional
en donde guardes en un campo la key personalizada que quieras,
y en el otro el valor, y luego busques... pero creo que tampoco verdad?
iriamos al tema del ciclo creo... jaajajajaja yo en tu caso lo haria tradicional y ya,
pero imagino por algo en particular lo necesitas asociativo

suerte

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #13 (permalink)  
Antiguo 13/09/2010, 03:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 15
Antigüedad: 14 años
Puntos: 1
Respuesta: Duda arrays

Si, por desgracia tiene que ser asociativo... pero bueno, si no se puede hacer lo q quiero, lo recorro con un bucle y ya esta, tampoco pasa nada jaja, lo unico que pensé que era un poco ortopedico tener que estar recorriendolo todo el rato cuando conozco exactamente la posicion a la que quiero llegar y queria saber si habia alguna forma

mortiprogramador gracias por tu tiempo

Etiquetas: arrays
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 15:59.