Ir al contenido



Foto

Pregunta sobre json y php


  • Por favor identifícate para responder
3 respuestas en este tema

#1 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 07 septiembre 2018 - 03:15

Hola, tengo este archivo pongamosle clientes.php


php
  1. <?php
  2.  
  3. $arr_clientes = array('nombre'=> 'Jose', 'edad'=> '20', 'genero'=> 'masculino',
  4. 'email'=> 'correodejose@dominio.com', 'localidad'=> 'Madrid', 'telefono'=> '91000000');
  5.  
  6.  
  7. //Creamos el JSON
  8. $json_string = json_encode($arr_clientes);
  9. $file = 'clientes.php';
  10. file_put_contents($file, $json_string);
  11.  
  12. ?>

y para leer el archivo tengo este otro llamado index.php


php
  1. <?php
  2.  
  3. //Leemos el JSON
  4. $datos_clientes = file_get_contents("clientes.php");
  5. $json_clientes = json_decode($datos_clientes, true);
  6.  
  7. foreach ($json_clientes as $cliente) {
  8.  
  9. echo $cliente."<br>";
  10. }
  11.  
  12. ?>

Mi pregunta es simple, porque cuando lo corro (y ojo notese que es un ejemplo leve ) me tira este error 


php
  1. Warning: Invalid argument supplied for foreach() in line 120

donde esa linea corresponde al


php
  1. foreach ($json_clientes as $cliente) {

y me ha pasado muchas veces con diferentes json que he realizado y aun no caigo en ver cual es el problema. Saludos


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 08 septiembre 2018 - 09:46

Porque el json que envías es un arreglo bidimensional, debes hacerlo de ésta forma:


php
  1. foreach($json_clientes as $key => $value) {
  2. ...
  3. }

Saludos.


  • 0

#3 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 10 septiembre 2018 - 09:07

Porque el json que envías es un arreglo bidimensional, debes hacerlo de ésta forma:


php
  1. foreach($json_clientes as $key => $value) {
  2. ...
  3. }

Saludos.

Hola, dices hacerlo de esta manera


php
  1. foreach($json_clientes as $key => $cliente) {
  2.  
  3. echo $key.$cliente;
  4.  
  5.  
  6. }

Si es asi a como lo entendí pues me lanza el mismo warning o estoy haciendo alguna tontera y aun no me entero?


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 10 septiembre 2018 - 09:29

Al parecer el array está mal formado, prueba con:


php
  1. $arr_clientes[] = array('nombre'=> 'Jose', 'edad'=> '20', 'genero'=> 'masculino',
  2. 'email'=> 'correodejose@dominio.com', 'localidad'=> 'Madrid', 'telefono'=> '91000000');

Nótese los corchetes.

 

Saludos.

 

Edito: Aclarando que el foreach sólo funciona para iterar un arreglo multidimensional o sea, varios arreglos dentro de un arreglo, en tu caso sólo tienes un arreglo, es un arreglo simple, sólo accedes a ella directamente $arr_clientes['nombre'].


  • 1