Foros del Web » Programando para Internet » PHP »

Meter datos en un array asociativo

Estas en el tema de Meter datos en un array asociativo en el foro de PHP en Foros del Web. Hola buenas, a ver si me pudieran ayudar con esto: Como puedo meter valores en un array asociativo y que se muestren su clave y ...
  #1 (permalink)  
Antiguo 29/10/2015, 10:07
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Meter datos en un array asociativo

Hola buenas, a ver si me pudieran ayudar con esto:

Como puedo meter valores en un array asociativo y que se muestren su clave y valor.

Esto y haciendo esto:

Código PHP:
Ver original
  1. $asteroides = array();
  2.        
  3.     array_push($asteroides, $nombre, $distancia_orbital);
  4.    
  5.  
  6.  
  7.         foreach ($asteroides as $nombre=>$distancia_orbital) {
  8.            
  9.             echo "El nombre del asteroide es: ".$nombre. "---distancia orbital: " .$distancia_orbital. "<br/>";
  10.         }
  11.  
  12.  
  13.  
  14. Y como resultado me dice:
  15.  
  16. El nombre del asteroide es: 0---distancia orbital: Terminator
  17. El nombre del asteroide es: 1---distancia orbital: 688
  18.  
  19.  
  20. pero lo que necesito es que salga esto:
  21.  
  22. El nombre del asteroide es: Terminator---distancia orbital: 688
  23.  
  24.  
  25. Podrian ayudarme, gracias.
  #2 (permalink)  
Antiguo 29/10/2015, 10:35
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Meter datos en un array asociativo

Buenas,

Dale un vistazo al tema de los array, lo que quieres hacer no creo que esté bien planteado.

Lo lógico sería algo así:
Código PHP:
$asteroides = array();

array_push($asteroides, array(
    
'nombre'            => 'nombre del asteroide 1',
    
'distancia_orbital' => 300
), array(
        
'nombre'            => 'nombre del asteroide 2',
        
'distancia_orbital' => 600
    
)
);


foreach(
$asteroides as $asteroide)
{
    echo 
"El nombre del asteroide es: " $asteroide['nombre'] . "---distancia orbital: " $asteroide['distancia_orbital'] . "<br/>";
}


// o así:
$asteroides[] = array(
    
'nombre'            => 'nombre del asteroide 1',
    
'distancia_orbital' => 300
);

$asteroides[] = array(
    
'nombre'            => 'nombre del asteroide 2',
    
'distancia_orbital' => 600
); 
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 29/10/2015, 15: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: Meter datos en un array asociativo

Saludo

Intenta con

Código PHP:
Ver original
  1. foreach ($asteroides as $id=>$actual)
  2.     echo "El nombre del asteroide es: ".$nombre. "---distancia orbital: " .$distancia_orbital. "<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; 29/10/2015 a las 15:31
  #4 (permalink)  
Antiguo 30/10/2015, 03:36
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Meter datos en un array asociativo

uncontroled duck, entiendo lo que dices y lo he aplicado a mi codigo y funciona pero hay un problema.

Te comento .

El asunto es que tengo que meter el nombre y la distancia orbital de cada asteroide mediante un formulario. y cuando meto los datos con el formulario de un nuevo asteroide solo me muestra el ultimo asteroide metido y no me muestra el listado de todos los asteroides metidos.

Ese es el problema que tengo.
Mira este es el codigo:

Código PHP:
Ver original
  1. $nombre = trim(($_POST['nombre']));
  2.     $distancia_orbital = trim(($_POST['distancia_orbital']));  
  3.    
  4.  
  5.     $asteroides = array();
  6.  
  7.     array_push($asteroides, array('clave_nombre'=>$nombre, 'valor_distancia_orbital' => $distancia_orbital));
  8.  
  9.  
  10.     foreach($asteroides as $valor)
  11.     {
  12.         echo "Nombre: " . $valor['clave_nombre'] . " | distancia orbital: " . $valor['valor_distancia_orbital'] . "<br/>";
  13.     }



Tambien he intentado esto otro con identico resultado, osea solo me muestra el ultimo asteroide introducido por el formulario y no me muestra el listado de todos los asteroides introducidos mediante el formulario.

Código PHP:
Ver original
  1. $nombre = trim(($_POST['nombre']));
  2.     $distancia_orbital = trim(($_POST['distancia_orbital']));
  3.  
  4.     $asteroides = array();
  5.  
  6.     array_push($asteroides, array($nombre=>$distancia_orbital));
  7.  
  8.  
  9.     foreach($asteroides as $clave=>$valor)
  10.     {
  11.         echo "Nombre: " . $nombre . " | distancia orbital: " . $distancia_orbital . "<br/>";
  12.     }


ahh en el formulario tengo esto:

Código HTML:
Ver original
  1. <form name="formulario" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
  2.  
  3. <input type="text" name="nombre" autofocus value="<?php if(isset($_POST['nombre']))?>" placeholder="Nombre"/>
  4.  
  5. <input type="text" name="distancia_orbital" value="<?php if(isset($_POST['distancia_orbital']))?>" placeholder="Distancia Orbital"/>
  6.  
  7. </form>





incluso lo he intentado de esta tercera manera y nada me sigue mostrando solo el ultimo introducido:

Código PHP:
Ver original
  1. $nombre = trim(($_POST['nombre']));
  2.     $distancia_orbital = trim(($_POST['distancia_orbital']));  
  3.  
  4.     $asteroides = array();
  5.  
  6.     $asteroides[$nombre] = $distancia_orbital;  
  7.  
  8.  
  9.     foreach($asteroides as $clave=>$valor)
  10.     {
  11.         echo "Nombre: " . $clave . " | distancia orbital: " . $valor . "<br/>";
  12.     }

Última edición por mensajeescrito; 30/10/2015 a las 04:15
  #5 (permalink)  
Antiguo 30/10/2015, 04:19
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Meter datos en un array asociativo

Es lógico, el formulario de por sí no persiste los datos.

Hay varias opciones, o aumentas el número de campos en el formulario, o persistes los datos a través de sesiones u otro sistema.

Pero luego surge la duda... una vez has metido todos... donde se guardan?

Imagino que es en una base de datos, si es así los vas guardando uno a uno, y vas recuperando los datos de la DB.

Este tema puede darte pistas de como solucionar la acumulación de datos con un formulario.
http://www.forosdelweb.com/f18/paso-...2/#post4748979

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 30/10/2015, 05:01
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 10 meses
Puntos: 5
Respuesta: Meter datos en un array asociativo

En serio me estoy liando.

Segun me dices en el enlace que me has mandado deberia usar session para que los datos no se pierdan.

Pero es que eso no lo hemos dado todavia en clase.

El asunto es que mi profesor quiere que almacenemos los datos dentro de un array asociativo y no en una base de datos por que eso ya lo veremos mas adelante.


y claro me sale lo de insertar en el array y recorrerlo y tal . pero no se como hacer lo de que me muestre el listado de todos los asteriodes introducidos sin usar base de datos ni sesiones

Se supone que es un ejercicio de que da igual que cerrando el navegador no se guarden los datos . es solo que mediante dandole al boton enviar de un formulario se vean los resultados en un listado en la misma pagina , usando un array asociativo .

Aun asi he intentado esto:

Código PHP:
Ver original
  1. if( $_POST["submit"] ){
  2.     foreach($_POST as $campo => $valor) {
  3.         $_SESSION['registro'][$campo] = $valor;
  4.     }
  5. }
  6.  
  7. echo $_SESSION['registro']['nombre'] . "<br/>";
  8. echo $_SESSION['registro']['distancia_orbital'] . "<br/>";


Pero con identico resultado, me muestra solo el ultimo que meto.

Y no me muestra la lista de todos los introducidos en el array asociativo.

help please!!!

Esto y cerca pero no termina de funcioname y me he atascado .

Última edición por mensajeescrito; 30/10/2015 a las 05:19
  #7 (permalink)  
Antiguo 30/10/2015, 05:31
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Meter datos en un array asociativo

Entonces tienes que aumentar el número de campos en el formulario. Así como lo tienes sólo estás enviando de a un asteroide, coloca 10 input y podrás enviar 10 asteroides con su respectiva distancia a la vez, almacenarlos en el array y luego mostrar la lista de los 10. No hay otra forma.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #8 (permalink)  
Antiguo 30/10/2015, 05:32
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Meter datos en un array asociativo

En ningún momento especificaste que tenías limitaciones para el desarrollo.

Por lo tanto, y me reitero en lo dicho:
Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Hay varias opciones, o aumentas el número de campos en el formulario, o persistes los datos a través de sesiones u otro sistema.
En el mensaje indicado, ademas de otras opciones se aportó esto:
Cita:
Iniciado por Uncontroled_Duck Ver Mensaje
Depende de lo que te permitan o dispongas tienes varias opciones:
  • session
  • cookies
  • get - url
  • post - input hide (serializado o en json)
  • campo temporal en base de datos (serializado o en json)
  • cache Filesystem
  • cache Memcache
  • otro tipo de cache disponible
Que son los más usados para persistir datos.

He dejado marcado en negrita los campos ocultos del formulario y la url como medio de propagación de datos, puesto que no incluye nada que no has dado por lo que he entendido.

Seguro que existen más formas de hacerlo, pero ello implica la utilización de más técnicas. Las url, debes usar el uso de GET. Para los campos ocultos deberás serializar los datos y después ir insertando los nuevos. Y para el resto, pues igual.

Creo que tienes información suficiente para investigar y probar distintos métodos, hasta que se adapte o encuentres la solución la medida.

Plantéalo, prueba, y si da errores, podemos ayudarte a solucionarlo.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: asociativo, meter
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:40.