Foros del Web » Programando para Internet » PHP »

buscar en un array asociativo un dato

Estas en el tema de buscar en un array asociativo un dato en el foro de PHP en Foros del Web. Hola amigas/os a ver si me pueden ayudar con esto: Estoy intentando, pero no me funciona, el revisar si existe en un array un indice. ...
  #1 (permalink)  
Antiguo 20/10/2017, 09:22
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
buscar en un array asociativo un dato

Hola amigas/os a ver si me pueden ayudar con esto:

Estoy intentando, pero no me funciona, el revisar si existe en un array un indice.

Os pongo en situacion:

el array asociativo es este:

Código PHP:
Ver original
  1. $_SESSION['subArray_pha']

Y le añado datos asi:

Código PHP:
Ver original
  1. $_SESSION['subArray_pha'][] = array($nombre => $mod);

y estoy intentando ver si exite en este array un $nombre previamente introducido asi:

Código PHP:
Ver original
  1. if( (array_key_exists($nombre, $_SESSION['subArray_pha'])) )
  2.  
  3. {
  4. echo 'Existe el ' . $nombre;
  5. }
  6.  
  7. else
  8.  
  9. {
  10. echo 'No existe el ' . $nombre;
  11. }

Pero esto ultimo no me funciona.

Si me pudieran ayudar les estaria muy agradecido por ello.

Un saludo.
  #2 (permalink)  
Antiguo 20/10/2017, 09:25
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: buscar en un array asociativo un dato

Solo pone el array

array_key_exists($nombre, $_SESSION)
  #3 (permalink)  
Antiguo 20/10/2017, 09:26
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: buscar en un array asociativo un dato

no te funciona porque seteas en un array de 2 dimensiones y consultas en la primera dimensión, debería ser así:


if( (array_key_exists($nombre, $_SESSION['subArray_pha'][])) )
  #4 (permalink)  
Antiguo 20/10/2017, 13:36
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: buscar en un array asociativo un dato

Efectivamente es como dices, tenia que adentrarme un nivel mas.

Gracias por tu ayuda eres un fenomeno
  #5 (permalink)  
Antiguo 21/10/2017, 11:05
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: buscar en un array asociativo un dato

Como tengo una segunda duda. pongo todo el codigo aqui para mayor claridad.

Mi problema es que cuando meto el primer valor mediante el formulario , pues no se me muestra reflejado en el listado.

Pero al meter un segundo valor en el formulario y lo envio entonces me aparecen de una

vez de golpe , tanto el primer dato que mandé como el segundo dato mandado.

Mi codigo es este:

Código PHP:
Ver original
  1.  
  2.     //RECIBIBOS LOS DATOS DEL FORMULARIO
  3.  
  4.     if($_POST)
  5.  
  6.         {
  7.             if(!empty($_POST['nombre']))
  8.  
  9.                 {
  10.                     $nombre = $_POST['nombre'];
  11.                     $masa = $_POST['masa'];
  12.                     $velocidad = $_POST['velocidad'];
  13.                     $mod = $_POST['mod'];              
  14.  
  15.  
  16.  
  17.                     $array_pha = array();
  18.  
  19.                     $subArray_pha = array();
  20.  
  21.  
  22.  
  23.                     $_SESSION['subArray_pha'][] = array($nombre => $mod);
  24.  
  25.                     $array_pha = $_SESSION['array_pha'][] = $_SESSION['subArray_pha'];
  26.  
  27.  
  28.  
  29.                     echo '<h1>Listado de los PHAs</h1>';
  30.  
  31.                     foreach($array_pha as $subArray_pha)
  32.  
  33.                         {
  34.                             if( !(array_key_exists($nombre, $subArray_pha)) or ($masa == '') or ($velocidad == '') or ($mod == '') )
  35.  
  36.                                 {
  37.                                     foreach($subArray_pha as $nombre => $mod)
  38.  
  39.                                         {
  40.                                             echo "<b>Nombre: </b>" . $nombre . " | <b>Mod: </b>" . $mod . "<br/>";
  41.                                         }
  42.                                 }
  43.                         }                  
  44.                 }
  45.  
  46.                 else
  47.  
  48.                 {
  49.                     echo 'Falta el nombre del PHA';
  50.                 }
  51.         }


Y el formulario:
Código HTML:
Ver original
  1. <form name="form_pha" method="post" action="index.php">
  2.  
  3.             <label>Nombre</label>
  4.  
  5.             <input type="text" name="nombre" value="<?php if( isset($_POST['nombre']) ) { echo $_POST['nombre']; }?>" placeholder="del PHA" />
  6.  
  7.  
  8.  
  9.             <br/><br/>
  10.  
  11.  
  12.  
  13.             <label>Masa</label>
  14.  
  15.             <input type="text" name="masa" value="<?php if( isset($_POST['masa']) ) { echo $_POST['masa']; }?>" placeholder="de 1 a 1.000.000.000. toneladas" />
  16.  
  17.  
  18.  
  19.             <br/><br/>
  20.  
  21.  
  22.  
  23.             <label>Velocidad</label>
  24.  
  25.             <input type="text" name="velocidad" value="<?php if( isset($_POST['velocidad']) ) { echo $_POST['velocidad']; }?>" placeholder="de translación" />
  26.  
  27.  
  28.  
  29.             <br/><br/>
  30.  
  31.  
  32.  
  33.             <label>Distancia mínima orbital</label>
  34.  
  35.             <input type="text" name="mod" value="<?php if( isset($_POST['mod']) ) { echo $_POST['mod']; }?>" placeholder="de 0.001 a 1.0" />
  36.  
  37.  
  38.  
  39.             <br/><br/>
  40.  
  41.  
  42.  
  43.             <input type="submit" name="enviar" value="introducir" />
  44.  
  45.         </form>

gracias de antemano
  #6 (permalink)  
Antiguo 22/10/2017, 20:54
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: buscar en un array asociativo un dato

Saludo

Eso es por la condición del if (donde se pregunta el key_exists)

Se podrían manejar dos soluciones:
1. Cambiar la condición (sin el !)
2. Quitar la condición, y simplemente que el foreach haga lo suyo.
__________________
"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 23/10/2017, 02:29
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: buscar en un array asociativo un dato

Eureka!!!, mortiprogramador, gracias por la ayuda.

Una duda mas:

¿Como consigo el valor de una key de un array?.

Me explico, teniendo esto:

Código PHP:
Ver original
  1. array_key_exists($nombre, $subArray_pha)

Y sabiendo que $nombre es la key. ¿Como consigo el valor de esa key en el subArray_pha?
  #8 (permalink)  
Antiguo 23/10/2017, 07:59
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: buscar en un array asociativo un dato

Metiendo la llave dentro del arreglo original
$_SESSION['array_pha'][$nombre]
  #9 (permalink)  
Antiguo 23/10/2017, 17:23
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: buscar en un array asociativo un dato

Saludo

Pues es con la condición que ya manejas,
pero tal vez el tema se de con la variable $nombre que es
usada en varias ocasiones.

¿Pero que se quiere lograr?
Obviar algún resultado? O sobreescribir? O que?
__________________
"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
  #10 (permalink)  
Antiguo 24/10/2017, 06:43
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: buscar en un array asociativo un dato

Si, creo que será mas practico que te explique que quiero conseguir mortiprogramador.

pha digamos que es un asteroide con masa, velocidad y distancia (vamos los campos del formulario).

Y debo mostrar por pantalla un listado con el "nombre" y "distancia" de todos los asteroides insertados por el formulario.

Pero; Si el asterioide ya fue incluido antes , es decir, si el "nombre" (que seria la key en un array asociativo), ya se encuentra incluido en la lista pues se sustituirá en el array solo si su "mod" (distancia), es menor que la vez pasada cuando se incluyo en el listado.

Si su "mod" es mayor pues se deja el que hubiera ya insertado en el array.

Por otro lado si el "nombre" del asteroide es la primera vez que se incluye en el array, pues se inserta por ser la primera vez y listo.

Pero como ves no me funciona y estoy entrando ya en la deseperación.
  #11 (permalink)  
Antiguo 24/10/2017, 07:49
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: buscar en un array asociativo un dato

Creo que no debes usar la key como dato, lo mejor -creo- es que hagas esto

Código PHP:
Ver original
  1. $asteroid = $_POST["asteroid"];
  2. if(!in_array($asteroid, $_SESSION["chosen-asteroids"])){
  3. $_SESSION["chosen-asteroids"][sizeof($_SESSION["chosen-asteroids"])] = $asteroid;
  4. }

Que esta sucediendo aquí, si no esta en el arreglo, usando in_array y negando para decir que no esta, se agrega a este, al principio como el tamaño (sizeof(), o count()) es 0, se agrega al índice 0, ergo tamaño será 1, si no está va al índice 1, y así...

Aquí solo faltaría lo tuyo, faltarian también todas las validaciones, etc. solo te propongo mi idea

Espero pueda ayudarte con eso

Última edición por alvaro_trewhela; 24/10/2017 a las 07:56
  #12 (permalink)  
Antiguo 25/10/2017, 18:00
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: buscar en un array asociativo un dato

Pues revisando el código, veo varios arrays.
Uhm, yo propongo esto:

Código PHP:
Ver original
  1. $nombre = $_POST['nombre'];
  2. $masa = $_POST['masa'];
  3. $velocidad = $_POST['velocidad'];
  4. $mod = $_POST['mod'];
  5.  
  6. if( empty($_SESSION['pha']) )
  7.     $_SESSION['pha'][$nombre] = $mod;
  8. else
  9. {
  10.     if( array_key_exists($nombre, $_SESSION['pha']) )
  11.     {
  12.         if($mod < $_SESSION['pha'][$nombre])
  13.             $_SESSION['pha'][$nombre] = $mod;
  14.     }
  15.     else
  16.         $_SESSION['pha'][$nombre] = $mod;
  17. }
  18.  
  19. echo '<h1>Listado de los PHAs</h1>';
  20.  
  21. foreach($_SESSION['pha'] as $nombre => $mod)
  22.     echo "<b>Nombre: </b>" . $nombre . " | <b>Mod: </b>" . $mod . "<br/>";
__________________
"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

Última edición por mortiprogramador; 27/10/2017 a las 15:35
  #13 (permalink)  
Antiguo 30/10/2017, 11:33
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: buscar en un array asociativo un dato

Eureka mortiprogramador !!!
Tu codigo es escelente. funciona!!!
Y lo mejor de todo es que lo entiendo (eso es bueno).
Eres un fenomeno.

Etiquetas: asociativo, dato, nombre
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 14:42.