Foros del Web » Programando para Internet » PHP »

posicion de elemento en array

Estas en el tema de posicion de elemento en array en el foro de PHP en Foros del Web. estimados: tengo el siguiente arreglo Código PHP: $frutas  = array( "manzana" =>  "apple" ,  "naranja"  =>  "orange" );  y lo recorro asi Código PHP: foreach (  $frutas  ...
  #1 (permalink)  
Antiguo 28/03/2007, 11:45
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
posicion de elemento en array

estimados:
tengo el siguiente arreglo

Código PHP:
$frutas = array("manzana"=> "apple""naranja" => "orange"); 
y lo recorro asi

Código PHP:
foreach ( $frutas as $nombre_espanol => $nombre_ingles ) {
echo 
$nombre_espanol;

me gustaria tambien poder imprimir la posicion del elemento en el array
una opcion seria inicializar $i=0 y luego incrementar $i++

hay otra forma de hacerlo? php no tiene una funcion que dandole el elemento nos devuelva su posicion?

nada mas
gracias!
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 28/03/2007, 11:56
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: posicion de elemento en array

Echale un ojo a este función array_search()

Saludillos.
  #3 (permalink)  
Antiguo 28/03/2007, 13:06
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: posicion de elemento en array

no se si me va a servir porque hice una prueba y no me está funcionando

por ej $frutas[1]; no me devuelve nada y me deberia devolver naranja no?
__________________
On error no hago nada porque deje de fumar...
  #4 (permalink)  
Antiguo 28/03/2007, 13:55
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: posicion de elemento en array

Maleud ya te dio la respuesta a como obtener la posición del elemento del array que le pases. En cuanto a:
Cita:
Iniciado por dieguicho Ver Mensaje
me gustaria tambien poder imprimir la posicion del elemento en el array
una opcion seria inicializar $i=0 y luego incrementar $i++
Eso de la posición numérica de un elemento de un array asociativo no es posible acerlo a travez de una función y tendrías que hacer un indice para que cada véz que se haga una iteración dentro del bucle este se incremente para darnos una posición númerica. La posición númerica nos la da la función array_search() siempre y cuando el array este indexado númericamente, aca te dejo algunos ejemplos:
array asociativo
Código PHP:
<?php
$frutas 
= array( "manzana" => "apple""naranja" => "orange" );
$posnum 0;

foreach ( 
$frutas as $nombre_espanol => $nombre_ingles )
{
   echo 
"El nombre en español es: <b>".$nombre_espanol."</b></br>";
   echo 
"El nombre en ingles es: <b>".$nombre_ingles."</b></br>";

   
$posicion array_search$nombre_ingles$frutas ); // busqueda de la posición con ayuda de una función php
   
echo "La posición con la función array_search() es: <font color=\"#FF0000\">".$posicion."</font></br>";

   echo 
"La posición con ayuda de un contador es: <font color=\"#FF0000\">".$posnum."</font><p>";
   
$posnum++; // incrementamos en una unidad la posición
}
?>
Ahora un array indexado númericamente:
Código PHP:
<?php
$frutas 
= array( "apple""orange" ); // da lo mismo que poner array( 0 => "apple", 1 => "orange" );

foreach ( $frutas as $indice => $nombre_ingles )
{
   echo 
"El indice es: <b>".$indice."</b></br>";
   echo 
"El nombre en ingles es: <b>".$nombre_ingles."</b></br>";

   
$posicion array_search$nombre_ingles$frutas ); // busqueda de la posición con ayuda de una función php
   
echo "La posición con la función array_search() es: <font color=\"#FF0000\">".$posicion."</font><p>";
}
?>
Así que eso de:
Cita:
Iniciado por dieguicho Ver Mensaje
$frutas[1]; no me devuelve nada y me deberia devolver naranja no?
con estos ejemplos supongo que te deve quedar claro porque no te devuelve nada. Espero sea lo que necesitabas o por lo menos te des una idea. Suerte
  #5 (permalink)  
Antiguo 28/03/2007, 15:15
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: posicion de elemento en array

comprendo lo que dices y probando tu script por ej me da

La posición con ayuda de un contador es: 1

pero si yo hago <? echo $frutas[1] ?> que es una posicion valida que me la dio el contador
no me devuelve nada
__________________
On error no hago nada porque deje de fumar...
  #6 (permalink)  
Antiguo 28/03/2007, 15:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: posicion de elemento en array

Es porque si haces:
Código PHP:
var_dump($frutas); 
Veras que no hay ningun key en el indice 1, para hacer eso tendrias que hacer algo asi:
Código PHP:
$frutas = array("manzana"=> "apple""naranja" => "orange"); 
$tmpFrutas = array();
$i 0;
foreach( 
$frutas as $nombre_espaniol => $nombre_ingles ) {
       
$tmpFrutas[] = $nombre_espaniol;
       
$i++;
}

echo 
$tmpFrutas[1]; // Imprime naranja. 
  #7 (permalink)  
Antiguo 28/03/2007, 15:28
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: posicion de elemento en array

Cita:
Iniciado por dieguicho Ver Mensaje
pero si yo hago <? echo $frutas[1] ?> que es una posicion valida que me la dio el contadorno me devuelve nada
El contador nos da una posición (imaginaria "no real") pero no es válida ya que estas intentando ingresar a un elemento de un array asociativo, esta clase de array tienen como indices letras en tu caso ¿así que de donde quieres que salga la posición 1 si tienes como posiciones en tu array nombres de frutas (manzana, naranja)?
para hacer lo que tu dices tendrías que tenes indexado tu array con números de esta forma:
$frutas = array( 0 => "apple", 1 => "orange" );
y solamente así si te devolvería el resultado que quieres, en tu caso los indices son manzana o naranja, para acceder a los valores de tu array tienes que poner $frutas['manzana']; o $frutas['naranja'] así que como vez el problema es que no sabes distinguir entre un array asociativo y un array numérico, para que esto te quede un poco más claro consulta el manual en línea para saber distinguir entre uno y otro:
http://www.php.net/manual/es/language.types.array.php
Espero que con esto se te haya aclarado un poco más el panoramal. Suerte
  #8 (permalink)  
Antiguo 28/03/2007, 15:40
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: posicion de elemento en array

ahora lo entendi, gracias

lo que me resulta raro, aun comprendiendo tu explicacion es porque si hago por ej. un

print_r ( array_keys($frutas));

obtengo

Array ( [0] => manzana [1] => naranja )

php me esta devolviendo un indice que jamas podre usar, porque lo hace?
__________________
On error no hago nada porque deje de fumar...
  #9 (permalink)  
Antiguo 28/03/2007, 17:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: posicion de elemento en array

la funcion array_keys te devuelve todos los indices de un array asociativo o normal, no es que nunca los vas a poder usar, pero por decir podrias hacer esto:
Código PHP:
$frutas = array("manzana"=> "apple""naranja" => "orange");
$claves array_keys($frutas);
echo 
$frutas[$claves[1]]; // Imprime orange. 
  #10 (permalink)  
Antiguo 29/03/2007, 07:33
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: posicion de elemento en array

excelente! es justamente eso lo que necesitaba!
__________________
On error no hago nada porque deje de fumar...
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 16:38.