如何从JSON解码PHP中获取多级数组值

如何从JSON解码PHP中获取多级数组值,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我在用PHP打印数组时遇到了一个问题。我正在从facebook API获取用户事件的数据,并以JSON格式获取结果 我只想得到每个位置(城市、国家)。有什么方法可以很容易地得到它们吗 我试过: $myjson=json_decode($_POST['Data'],true); echo "<pre>"; print_r($myjson["data"]); echo "<pre>"; echo count($myjson["data"]); echo "<pre>

我在用PHP打印数组时遇到了一个问题。我正在从facebook API获取用户事件的数据,并以JSON格式获取结果

我只想得到每个位置(城市、国家)。有什么方法可以很容易地得到它们吗

我试过:

$myjson=json_decode($_POST['Data'],true);
echo "<pre>";
print_r($myjson["data"]);
echo "<pre>";
echo count($myjson["data"]);
echo "<pre>";
for($i =0; $i<count($myjson["data"]); $i++){
    print($myjson["data"][$i]["name"]);
    echo "<br />";
}
我得到以下结果:

数组(
[0]=>阵列
(
[说明]=>这是测试
[名称]=>测试事件Web开发人员
[位置]=>阵列
(
[名称]=>拉合尔
[位置]=>阵列
(
[城市]=>拉合尔
[国家]=>巴基斯坦
[纬度]=>31.5497
[经度]=>74.3436
)
[id]=>108104849224069
)
[开始时间]=>2015-10-21T19:00:00+0500
[id]=>1503962379902466
[rsvp_状态]=>出席
)
[1] =>阵列
(
[说明]=>(为简洁起见,省略了完整说明)
[名称]=>和平巴基斯坦在线竞赛!
[位置]=>阵列
(
[名称]=>旁遮普信息技术委员会(PITB)
[位置]=>阵列
(
[城市]=>拉合尔
[国家]=>巴基斯坦
[纬度]=>31.5497
[经度]=>74.3436
[zip]=>54600
)
[id]=>34086042630070
)
[开始时间]=>2015-08-10T00:00:00+0500
[id]=>907352572664461
[rsvp_状态]=>出席
)
[2] =>阵列
(
[说明]=>(为简洁起见,省略了完整说明)
[结束时间]=>2015-06-17T19:30:00+0500
[名称]=>2015年开放日
[位置]=>阵列
(
[名称]=>巴基斯坦拉合尔费罗泽普尔路346-B号Arfa软件技术园6楼-54000
)
[开始时间]=>2015-06-17T16:30:00+0500
[id]=>1619010958352625
[rsvp_状态]=>出席
)
[3] =>阵列
(
[说明]=>为期两天的Unity 3d游戏设计与开发研讨会
[结束时间]=>2015-04-26T16:00:00+0500
[名称]=>游戏设计与开发研讨会
[位置]=>阵列
(
[名称]=>拉合尔坎特P.A.F体育场对面Sarfarz-Rafique路75号楼
)
[开始时间]=>2015-04-26T10:00:00+0500
[id]=>1651929135026796
[rsvp_状态]=>出席
)
[4] =>阵列
(
[说明]=>(为简洁起见,省略了完整说明)
[姓名]=>与专家现场聊天:巴基斯坦的甩负荷对您有何影响?
[位置]=>阵列
(
[名称]=>巴基斯坦伊斯兰堡
)
[开始时间]=>2015-03-26T11:00:00-0400
[id]=>347677685418059
[rsvp_状态]=>出席
)
[5] =>阵列
(
[说明]=>(为简洁起见,省略了完整说明)
[名称]=>9月6日——巴基斯坦国防日
[位置]=>阵列
(
[名称]=>虚拟事件
)
[开始时间]=>2013-09-06
[id]=>434438063339987
[rsvp_状态]=>出席
)
)

基本上,您有一个对象数组。由于您强制将JSON解码为一个数组,因此您拥有一个数组数组

从上面示例中的每个对象获取城市/国家非常简单

映射到
place=>location
的键提供了一个数组,其中包含要查找的
city
country
键。因此,
$myjson['data'][$i][place']['location']['city']
将为您提供城市,
$myjson['data'][$i][place']['location']['country']
将为您提供国家,但您可以迭代
$myjson['data']
使用
foreach
比使用
for
循环更方便


例如,第一个元素将为您提供巴基斯坦拉合尔的
Lahore

我可以使用嵌套for循环来获取这些值吗?您可以这样做,但在您的情况下,效率不高,我想说这显示了注意:未定义索引:位置在如果位置值未从FaceBook返回,则可能是某些数组元素没有“位置”索引,例如我看到的第三个(Unity 3d上为期两天的游戏设计和开发研讨会)。您需要使用if语句来检查这一点。在php中,我们使用isset()函数来检查数组元素是否有键。我现在使用的是`if(isset($myjson[“data”][$i][$i][“place”][“place”][“location”][“city”]){.echo“
“$myjson[“data”][$i][“place location”][“city”];}`它对我来说很好,谢谢我为您做了类似的
($i=0;$i然后请使用您使用的实际代码更新您的问题,并告诉我们结果是什么,以及您预期的结果是什么。您似乎在问题中完全忽略了该代码。此外,在从数组中提供示例数据时,请使用而不是
print\r
。否则很难知道错误存在于代码或数据中。
echo "<pre>";
print_r($myjson["data"]);
foreach($myjson['data'] as $arr) {
    echo $arr['place']['location']['city'], ', ', $arr['place']['location']['country'], "\n";
}
foreach($myjson["data"] as $data){
  echo $data['place']['location']['city'];
  echo $data['place']['location']['country'];
}