首页 > 解决方案 > 用php动态解析多个json数组对象

问题描述

我有一个名为“brands.json”的json文件

{
   "title":"List of brands",
   "version" : 1,
   "nike": [
    {"type":"shoes","size":10,"color":"black"},
    {"type":"shirt","size":"S","color":"black"}
   ],
   "converse": [
    {"type":"shoes","size":10,"color":"red"},
    {"type":"backpack","size":"N/A","color":"red"}
   ],
   "champion": [
    {"type":"shoes","size":10,"color":"blue"},
        {"type":"pants","size":"M","color":"grey"}      
    ]
}

我在网上查看了一些示例并获取了这段代码

<?php
        $read = file_get_contents("report.json");
        $json = json_decode($read, true);
        foreach($json as $key => $val){
            if(is_array($val)){
                echo "$key : <br>";
                foreach($key as $k => $v){
                    echo "$k => $v<br>";
                }
            }       
            else {
                echo "$key => $val<br>";            
            }
        }
    ?>

我可以打印出来

标题 => 品牌列表

版本 => 1

耐克:

交谈 :

冠军:

但我想在这些品牌中加入阵列。我正在考虑foreach在 if 语句中设置一个循环。但是,它返回错误

耐克:警告:为 foreach() 提供的参数无效。

一些资源建议做类似的事情,$json->nike as $item => $v但这将是多余的,因为我也有 converse 和 Champion 数组。如果有人可以指导我找到一个好的资源或提供一个代码示例,我将不胜感激。

预期表耐克:

类型 | 尺寸 | 颜色

鞋子| 10 | 黑色的

衬衫| 小号 | 黑色的

标签: phpjson

解决方案


创建缓冲输出并显示它的函数

    $read = '{
       "title":"List of brands",
       "version" : 1,
       "nike": [
        {"type":"shoes","size":10,"color":"black"},
        {"type":"shirt","size":"S","color":"black"}
       ],
       "converse": [
        {"type":"shoes","size":10,"color":"red"},
        {"type":"backpack","size":"N/A","color":"red"}
       ],
       "champion": [
        {"type":"shoes","size":10,"color":"blue"},
            {"type":"pants","size":"M","color":"grey"}      
        ]
    }';

    $json = json_decode($read, true);

    // this function will run recursively
    function display($val){
       // create output buffer variable
        $output = "";
       // check is array or not
        if(is_array($val)){
            // check is multimensional or not
            if(isset($val[0])){
                foreach($val as $v){
                    $output .= "<br/>".display($v);
                }
            }else{
                foreach($val as $k => $v){
                    $output .= $k." => ".display($v)."<br/>";
                }
            }      
        }else{
            // append output if it just a value
            $output .= $val;
        }
        return $output;
    }

    echo display($json);

?>

预览 https://code.sololearn.com/wkeim4HQO9zP#php


推荐阅读