Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取值并通过外部json数组循环_Php_Json - Fatal编程技术网

Php 获取值并通过外部json数组循环

Php 获取值并通过外部json数组循环,php,json,Php,Json,我想通过PHP和Json创建一个国家数据库。我通过外部json获取数据: { "ph": { "name": "Philippines", "color": "green" }, "ch": { "name": "China", "color": "red" }, "us": { "name": "USA", "color": "blue" } }

我想通过PHP和Json创建一个国家数据库。我通过外部json获取数据:

{
    "ph": {
        "name": "Philippines",
        "color": "green"
    },

    "ch": {
        "name": "China",
        "color": "red"
    },

    "us": {
        "name": "USA",
        "color": "blue"
    }

}
我通过php访问它们:

$jsonfile=file_get_contents(“mapdata.json”);
$data=json_decode($jsonfile,true);
如果我愿意,我可以访问每个国家的个人数据,例如:

echo$data['ph']['name'];
但是,只有当我在
$data['ph']
中知道
ph
时,这才有效。如果我有100多个国家,我想做一个for循环来显示它们的名称和颜色,我该如何实现呢

这有点像:

foreach($data作为$value){
echo$value[“某物”]。。。。
}

非常感谢

正如@Kevin在评论中指出的,要显示数组中的
名称
值,只需使用
$value['name']
。要仅显示
ph
国家/地区的值,您需要稍微修改
foreach
循环,以获取每个条目的
键以及
值:

foreach ($data as $key => $value) {
    if ($key == 'ph') {
         echo $value['name'] . ': ' . $value['color'];
    }
}
输出:

Phillipines: green
Phillipines: green
正如@misorude所指出的,如果您只想访问某个特定国家的值,那么更有效的方法是使用数组查看该国家的值是否存在,然后直接访问它们:

if (array_key_exists('ph', $data)) {
    echo $data['ph']['name'] . ': ' . $data['ph']['color']. PHP_EOL;
}
输出:

Phillipines: green
Phillipines: green

你很接近了,在循环中。只需使用
$value['name']
。或者您也不确定它是否有索引
名称
?然后添加另一个循环again@Kevin谢谢!成功了。还有一件事,如果我只想显示
名称
,如果数组的标题是
ph
,我该怎么做?如果数组的标题是ph,它会跳过
ch
us
?在循环中使用一个
if
语句,已经有了操作词
if
。如果值是this->echo this我尝试了
if($value==“ph”)
然后
echo$value['name']
但是它没有显示任何内容
$value
表示当前迭代中的整个数组,
$value['name']
表示并指向实际值。因此,您也需要在
if
语句中指出它。