在PHP中循环嵌套的JSON

时间:2016-07-14 18:08:57

标签: php json loops foreach

我一直在寻找,但找不到解决这个问题的方法。我有以下JSON:

    {
  "success": true,
  "outputScenario": "Informacion Inmuebles",
  "data": {
    "inmueble": [
      {
        "titulo": [
          "Venta casa Villa liliana sur de Armenia"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 160 m2  , 4 alcobas   y 2 baños  "
        ],
        "precio": [
          "$140.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b49742320160714114235.jpg"
        ],
        "referencia": [
          199414
        ]
      },
      {
        "titulo": [
          "Casa 5 alcobas area 110m2 sector Colegio CASD"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 110 m2  , 5 alcobas   y 3 baños  "
        ],
        "precio": [
          "$140.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b42241220160714111955.jpeg"
        ],
        "referencia": [
          199395
        ]
      },
      {
        "titulo": [
          "CASA EN ARCADEZ"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío , 3 alcobas   y 1 baños  "
        ],
        "precio": [
          "$85.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b2160620160714095012.jpg"
        ],
        "referencia": [
          199341
        ]
      },
      {
        "titulo": [
          "CASA EN BOSQUES DE PINARES"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 60 m2  , 2 alcobas   y 1 baños  "
        ],
        "precio": [
          "$70.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b2160120160714094050.jpg"
        ],
        "referencia": [
          199328
        ]
      },
      {
        "titulo": [
          "CASA EN LA BRASILIA NUEVA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 58,35 m2  , 3 alcobas   y 1 baños  "
        ],
        "precio": [
          "$75.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b2160820160714091008.jpg"
        ],
        "referencia": [
          199313
        ]
      },
      {
        "titulo": [
          "CASA CONJUNTO CERRADO AL NORTE"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 150 m2  , 4 alcobas   y 2 baños  "
        ],
        "precio": [
          "$350.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b2160920160714083544.jpg"
        ],
        "referencia": [
          199302
        ]
      },
      {
        "titulo": [
          "VENTA DE CASA EN MERCEDES DEL NORTE DE  ARMENIA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 72 m2  , 2 alcobas   y 1 baños  "
        ],
        "precio": [
          "$100.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b4651320160713070958.jpg"
        ],
        "referencia": [
          199254
        ]
      },
      {
        "titulo": [
          "CASA SECTOR LA GRESIA, TRIFAMILIAR 125M2, HERMOSA."
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 125 m2  , 5 alcobas   y 4 baños  "
        ],
        "precio": [
          "$150.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b4119120160713023016.jpg"
        ],
        "referencia": [
          199070
        ]
      },
      {
        "titulo": [
          "Venta casa Villa Liliana sur de Armenia"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 71 m2  , 3 alcobas   y 3 baños  "
        ],
        "precio": [
          "$120.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b4974620160713120208.jpg"
        ],
        "referencia": [
          198965
        ]
      },
      {
        "titulo": [
          "VENTA DE CASA AL SUR DE ARMENIA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 79 m2  , 4 alcobas   y 2 baños  "
        ],
        "precio": [
          "$95.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b875720160713111033.jpg"
        ],
        "referencia": [
          198929
        ]
      },
      {
        "titulo": [
          "VENTA DE CASA EN EL NORTE DE ARMENIA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 154 m2  , 4 alcobas   y 3 baños  "
        ],
        "precio": [
          "$310.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b46512920160712093023.jpg"
        ],
        "referencia": [
          198751
        ]
      },
      {
        "titulo": [
          "VENTA CASA ARMENIA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 110 m2  , 3 alcobas   y 2 baños  "
        ],
        "precio": [
          "$185.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b831820160712054648.jpg"
        ],
        "referencia": [
          198686
        ]
      },
      {
        "titulo": [
          "VENTA DE CASA EN BOGOTA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 191 m2  , 5 alcobas   y 3 baños  "
        ],
        "precio": [
          "$280.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b8751020160712032609.jpg"
        ],
        "referencia": [
          198628
        ]
      },
      {
        "titulo": [
          "CASA SEMI CAMPESTRE EN ARMENIA ZONA NORTE"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 125 m2  , 3 alcobas   y 3 baños  "
        ],
        "precio": [
          "$260.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b41192620160712040422.jpg"
        ],
        "referencia": [
          198594
        ]
      },
      {
        "titulo": [
          "Barrio El Recreo "
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío , 4 alcobas   y 3 baños  "
        ],
        "precio": [
          "$190.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b2470420160712033152.jpg"
        ],
        "referencia": [
          198587
        ]
      },
      {
        "titulo": [
          "VENTA CASA EN EL NORTE DE ARMENIA"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío , 3 alcobas   y 3 baños  "
        ],
        "precio": [
          "$320.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/loscompradores/images/noimagelc.png"
        ],
        "referencia": [
          198578
        ]
      },
      {
        "titulo": [
          "Venta Casas Rio Claro en Armenia, Quindio"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 63,79 m2    "
        ],
        "precio": [
          "Consultar"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b80251620160712031258.png"
        ],
        "referencia": [
          198577
        ]
      },
      {
        "titulo": [
          "Casa en venta sector Norte Nueva Cecilia"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 189 m2  , 3 alcobas   y 3 baños  "
        ],
        "precio": [
          "$350.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b63892220160712025826.jpg"
        ],
        "referencia": [
          198574
        ]
      },
      {
        "titulo": [
          "Casa en condominio"
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 245 m2  , 3 alcobas   y 3 baños  "
        ],
        "precio": [
          "$520.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b658320160712024747.jpg"
        ],
        "referencia": [
          198569
        ]
      },
      {
        "titulo": [
          "Barrio Versalles Calarca "
        ],
        "descripcion": [
          "Casa para vender en Armenia, Quindío, con área de 224 m2  , 6 alcobas   y 1 baños  "
        ],
        "precio": [
          "$250.000.000"
        ],
        "moneda": [
          "Pesos Colombianos"
        ],
        "imagen": [
          "https://images.wasi.co/inmuebles/b2470620160712122415.jpg"
        ],
        "referencia": [
          198491
        ]
      }
    ]
  },
  "stateToken": "eyJqYXIiOnsidmVyc2lvbiI6InRvdWdoLWNvb2tpZUAyLjIuMiIsInN0b3JlVHlwZSI6Ik1lbW9yeUNvb2tpZVN0b3JlIiwicmVqZWN0UHVibGljU3VmZml4ZXMiOnRydWUsImNvb2tpZXMiOlt7ImtleSI6IlBIUFNFU1NJRCIsInZhbHVlIjoiY2xkdm82aDFzc2pycjFyNnAyZmxwYzNpMjMiLCJleHBpcmVzIjoiMjAxNi0wNy0yMVQxODoyODo0NC4wMDBaIiwibWF4QWdlIjo2MDQ4MDAsImRvbWFpbiI6Ind3dy5sb3Njb21wcmFkb3Jlcy5jb20iLCJwYXRoIjoiLyIsImhvc3RPbmx5Ijp0cnVlLCJjcmVhdGlvbiI6IjIwMTYtMDctMTRUMTg6Mjg6NDQuMzQxWiIsImxhc3RBY2Nlc3NlZCI6IjIwMTYtMDctMTRUMTg6Mjg6NDQuMzQxWiJ9XX0sInZlcnNpb24iOjF9"
}

我用于循环数据的PHP代码如下:

<?php
$C = urlencode($_GET['ciudad']);
$T = $_GET['tipo'];
$N = $_GET['negocio'];

$search = "http://url.com/buscar/0.0.3?&q=&qc=&ciudad=".$C."&tipo_inmueble=".$T."&tipo_negocio=".$N."&alcobas=0&banios=0&precio=0";

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $search);
$result=curl_exec($ch);
$search_results = json_decode($result,true);
?>

<?php
foreach(array_slice($search_results['data']['inmueble'],0,5) as $result):
    $titulo = $result["titulo"];
    $descripcion = $result["descripcion"];
    $precio = $result["precio"];
    $moneda = $result["moneda"];
    $imagen = $result["imagen"];
    $referencia = $result["referencia"];
?>

<?php $var = $titulo; if (empty($var)) { echo ''; } if (isset($var)) { echo $titulo; }?>

<?php endforeach; ?>

但是这不起作用,我不知道问题是关于JSON上的括号,因为我使用相同的代码来循环不同的JSON源并且它可以工作。

array_slice给出的错误如下:

  

警告:array_slice()期望参数1为数组,null中给出null   第20行/buscar.php警告:提供的参数无效   第20行/buscar.php中的foreach()给出了这个错误。

删除array_slice错误是:

  

警告:在/buscar.php中为foreach()提供的参数无效   第20行

var_dump($search_results);显示:

  

NULL

1 个答案:

答案 0 :(得分:2)

json_decode()返回null,这是因为它是无效的json

检查

http://jsonlint.com/

您的回复是数组,

更改

TOKEN(character_expression, delimiter_string, occurrence)

$titulo = $result["titulo"];

其他它可以在我的系统上运行

$titulo = $result["titulo"][0];

给我

 <?php
$result=file_get_contents('json.txt');
$search_results = json_decode($result,true);
?>

<?php
foreach(array_slice($search_results['data']['inmueble'],0,5) as $result):
    $titulo = $result["titulo"][0];
    $descripcion = $result["descripcion"][0];
    $precio = $result["precio"][0];
    $moneda = $result["moneda"][0];
    $imagen = $result["imagen"][0];
    $referencia = $result["referencia"][0];
?>
<?php $var = $titulo; if (empty($var)) { echo ''; } if (isset($var)) { echo $titulo; }?>

    <?php endforeach; ?>