我正在尝试在显示的每个实例中打印files数组的url和filename。例如每个
http://xbins.nyc/mvscu
mvscu.zip
http://xbins.nyc/mvsc
mvsc.zip
http://xbins.nyc/mvscjp
mvscjp.zip
以上是下面代码运行后的输出方式。它会抛出错误,因为它正在检查更多嵌套数组的整个代码。
{
"accountId":"Ja4Rulez",
"finished":"true",
"createdAt":"2016-05-20",
"releaseDate":"1998",
"updatedAt":"2016-05-20",
"expires":"1468905126822",
"requestTableUS":{
"tableCAPCOM":{
"tableName":"CAPCOM",
"partial":"true",
"files":[
{
"url":"http://xbins.nyc/mvscu",
"filename":"mvscu.zip"
}
]
}
},
"requestTableMain":{
"tableCAPCOM":{
"tableName":"CAPCOM",
"partial":"true",
"files":[
{
"url":"http://xbins.nyc/mvsc",
"filename":"mvsc.zip"
}
]
}
},
"requestTableJp":{
"tableCAPCOM":{
"tableName":"CAPCOM",
"partial":"true",
"files":[
{
"url":"http://xbins.nyc/mvscjp",
"filename":"mvscjp.zip"
}
]
}
}
}
上面的查询被发送到下面的$ data变量,然后json_decoded到$ obj。
<?php
$obj = json_decode($data, TRUE);
foreach($obj as $row){
foreach($row as $k){
foreach($k as $j){
foreach($j as $l){
echo $l['url'];
echo "<br />";
echo $l['filename'];
echo "<br />";
}
}
}
}
?>
返回的“requestTable”返回的数量也各不相同,但这里只是3,但它可以从3变为100+。我需要确保循环可以容纳额外的“requestTables”(如果可用)。
答案 0 :(得分:1)
$obj
的大多数元素都不是数组,因此您无法在其上使用foreach
。您只想深入查看其键以requestTable
开头的元素,然后您只想遍历files
,而不是遍历该元素中的所有内容。
foreach ($obj as $key => $row) {
if (substr($key, 0, 12) == 'requestTable')) {
foreach ($row['tableCAPCOM']['files'] as $l) {
echo $l['url'];
echo "<br />";
echo $l['filename'];
echo "<br />";
}
}
}
答案 1 :(得分:1)
此代码段应该完全符合您的要求。
<?php
$array = json_decode($json, true);
foreach($array as $key=>$data) {
if (strpos($key, 'requestTable') !== false) {
foreach($data['tableCAPCOM']['files'] as $file) {
echo $file['url'];
echo "<br />";
echo $file['filename'];
echo "<br />";
}
}
}
?>