【问题标题】:Get JSON property name followed by item name values using PHP使用 PHP 获取 JSON 属性名称后跟项目名称值
【发布时间】:2019-04-20 15:23:57
【问题描述】:

我正在尝试使用 PHP 解析 JSON,然后打印父属性的名称,后跟项目。

这是 JSON

{
"Specials": [{
    "name": "Shirt","dsc":"cotton shirt",
    "vari": [{ "name":"red", "price":25.80 },{ "name":"green", "price":26.50 }]
}, 

{
    "name":"shorts","dsc":"one size","price":15.99
},

{
    "name":"shoes","dsc":"black shoes",
    "vari": [{ "name":"capri", "price":37.80 },{ "name":"shooters", "price":28.50 }]
}],

"Jumpers": [{
    "name": "Glax Red","dsc":"thin lightweight","price":22.99
}, 

{
    "name": "Bazoo Care","dsc":"ideal for winter","price":32.99
}]
}

我使用以下方法对其进行了迭代:

$readjson = file_get_contents('products.json') ;

$data = json_decode($readjson);

foreach ($data as $products) {
foreach ($products as $product) {

echo $product->name."<br>".$product->dsc."<br>";
if (isset($product->price))
    {
echo " ".$product->price."<br>";
}
else {
foreach ($product->vari as $var) {
echo $var->name." ".$var->price."<br/>";
}
}

输出是:

衬衫 棉衬衫 红色 25.8 绿色 26.5 短裤 一个尺寸 15.99 ...

我想先打印属性的名称,然后显示其中的项目,它应该如下所示:

特价

衬衫 棉衬衫 红色 25.8 绿色 26.5

短裤 一个尺寸 15.99 ...

跳线

葛兰素红 轻薄 22.99

巴祖护理 非常适合冬天 32.99

我已将其添加为外部嵌套循环:

foreach ($data as $products => $value) {
echo $products;}

但这只会返回第一个对象名称。我怎样才能实现上述目标?

这是 JSON 的可视化。

【问题讨论】:

    标签: php json object


    【解决方案1】:

    你快到了,你只需要在第一个循环中输出键名,所以

    foreach ($data as $products) {
    

    是循环遍历项目Specials 等的位。所以首先抓住foreach() 中的密钥并将其作为循环中的第一件事输出...

    foreach ($data as $key => $products) {
        echo $key."<br>";
    

    (没有}) 会给...

    Specials<br>Shirt<br>cot...
    

    【讨论】:

      【解决方案2】:

      json 转换为数组并循环遍历它

       $data = json_decode($readjson, true);
      

      这里我们传递true 参数,表示一个没有对象的数组。

      foreach($data as $key => $value){
        foreach($value as $k => $v){
           echo '<b>'.$v['name'].'</b> '.' '.$v['dsc'];
           echo isset($v['price']) ? $v['price'] : ' ';
           if(array_key_exists('vari', $v)){
              $vari = array_column($v['vari'], 'price','name');
              foreach($vari as $_k => $_v){
                  echo $_k.' '.$_v;
              }
           }
           echo '<hr>';
        }
      }
      

      结果:-

      Shirt cotton shirt red 25.8green 26.5
      shorts one size15.99
      shoes black shoes capri 37.8shooters 28.5
      Glax Red thin lightweight22.99
      Bazoo Care ideal for winter32.99
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 2023-03-07
        • 1970-01-01
        • 2011-03-31
        • 2012-11-17
        相关资源
        最近更新 更多