duanli0162 2019-08-11 19:02
浏览 244
已采纳

如果结果存在,则获取JSON节点

I need to get the values for a JSON node based on if the value exists

I figured out how to detect if the flavor exists in the JSON, now I just need to get all of the information inside that node

$flav = $_GET['flav'];
$json = '[{
    "flavor": "chocolate",
    "type": "hard",
    "instock": true
}, {
    "flavor": "vanilla",
    "type": "hard"
    "instock": false
}, {
    "flavor": "strawberry",
    "type:" "soft"
    "instock": true
}, {
    "flavor": "mint",
    "type": "hard"
    "instock": true
}]';
$decode = json_decode($json);
if(in_array($flav, array_column($decode, 'flavor'))) {
  print flavor . ' - ' . type . ' - ' . instock;
} else {
  print 'Invalid flavor';
}
  • 写回答

1条回答 默认 最新

  • douhuitan5863 2019-08-11 19:41
    关注

    There are some issues with your JSON, so I've corrected those and the main problem is that you use in_array() which just tells you it is in the array and not where. So in the first version I've changed this to array_search() which then tells you where it is.

    $flav = $_GET['flav'];
    $json = '[{
        "flavor": "chocolate",
        "type": "hard",
        "instock": true
    }, {
        "flavor": "vanilla",
        "type": "hard",
        "instock": false
    }, {
        "flavor": "strawberry",
        "type" : "soft",
        "instock": true
    }, {
        "flavor": "mint",
        "type": "hard",
        "instock": true
    }]';
    $decode = json_decode($json);
    if(($key = array_search($flav, array_column($decode, 'flavor'))) !== false) {
        print "flavor - ". $decode[$key]->flavor.PHP_EOL
            . "type - ". $decode[$key]->type.PHP_EOL
            . "instock - ". $decode[$key]->instock.PHP_EOL;
    } else {
        print 'Invalid flavor';
    }
    

    I've also done a second version which re-indexes the array with flavor as the index and so you can directly access it...

    // Decode to an array
    $decode = json_decode($json, true);
    // Create a new version of the array indexed by the flavor
    $decode = array_column($decode, null, "flavor");
    // Check if it is in the array
    if ( isset ($decode[$flav]) ){
        // Directly output the data
        print "flavor - ". $decode[$flav]["flavor"].PHP_EOL
            . "type - ". $decode[$flav]["type"].PHP_EOL
            . "instock - ". $decode[$flav]["instock"].PHP_EOL;
    } else {
        print 'Invalid flavor';
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看