尝试使用json_decode

时间:2016-05-20 23:12:34

标签: php arrays json

我正在尝试在显示的每个实例中打印files数组的url和filename。例如每个

http://xbins.nyc/mvscu
mvscu.zip
http://xbins.nyc/mvsc
mvsc.zip
http://xbins.nyc/mvscjp
mvscjp.zip

以上是下面代码运行后的输出方式。它会抛出错误,因为它正在检查更多嵌套数组的整个代码。

{
   "accountId":"Ja4Rulez",
   "finished":"true",
   "createdAt":"2016-05-20",
   "releaseDate":"1998",
   "updatedAt":"2016-05-20",
   "expires":"1468905126822",
   "requestTableUS":{
      "tableCAPCOM":{
         "tableName":"CAPCOM",
         "partial":"true",
         "files":[
            {
               "url":"http://xbins.nyc/mvscu",
               "filename":"mvscu.zip"
            }
         ]
      }
   },
   "requestTableMain":{
      "tableCAPCOM":{
         "tableName":"CAPCOM",
         "partial":"true",
         "files":[
            {
               "url":"http://xbins.nyc/mvsc",
               "filename":"mvsc.zip"
            }
         ]
      }
   },
   "requestTableJp":{
      "tableCAPCOM":{
         "tableName":"CAPCOM",
         "partial":"true",
         "files":[
            {
               "url":"http://xbins.nyc/mvscjp",
               "filename":"mvscjp.zip"
            }
         ]
      }
   }
}

上面的查询被发送到下面的$ data变量,然后json_decoded到$ obj。

<?php

$obj = json_decode($data, TRUE);

foreach($obj as $row){
  foreach($row as $k){
    foreach($k as $j){
      foreach($j as $l){
        echo $l['url'];
        echo "<br />";
        echo $l['filename'];
        echo "<br />";
      }
    }
  }
}

?>

返回的“requestTable”返回的数量也各不相同,但这里只是3,但它可以从3变为100+。我需要确保循环可以容纳额外的“requestTables”(如果可用)。

2 个答案:

答案 0 :(得分:1)

$obj的大多数元素都不是数组,因此您无法在其上使用foreach。您只想深入查看其键以requestTable开头的元素,然后您只想遍历files,而不是遍历该元素中的所有内容。

foreach ($obj as $key => $row) {
    if (substr($key, 0, 12) == 'requestTable')) {
        foreach ($row['tableCAPCOM']['files'] as $l) {
            echo $l['url'];
            echo "<br />";
            echo $l['filename'];
            echo "<br />";
        }
    }
}

答案 1 :(得分:1)

此代码段应该完全符合您的要求。

<?php
$array = json_decode($json, true);

foreach($array as $key=>$data) {
    if (strpos($key, 'requestTable') !== false) {

        foreach($data['tableCAPCOM']['files'] as $file) {

            echo $file['url'];
            echo "<br />";
            echo $file['filename'];
            echo "<br />";

        }
    }
}
?>