我需要遍历一个多维数组并提取所有数据:
PHP程式码:
//Loads the data and transforms it into an array
$json_data = json_decode(file_get_contents('data.json'));
//Loops through the array and returns the values
echo '<br>'.'Modal: ' .$json_data->list[0]->mode;
echo '<br>'.'Variation: ' .$json_data->list[0]->change;
foreach ($json_data->list[0]->expiry as $data) {
echo '<br>'.'Due date: ' .$data->cdexpiry;
echo '<br>'.'Value: ' .$data->vlexpiry;
}
JSON数据:
{
"list": [
{
"expiry": [
{
"cdexpiry": "v130",
"vlexpiry": "33528.99"
},
{
"cdexpiry": "v230",
"vlexpiry": "21648.39"
},
{
"cdexpiry": "v150",
"vlexpiry": "185350.30"
}
],
"mode": "0401",
"change": "N"
},
{
"expiry": {
"cdexpiry": "v40",
"vlexpiry": "1091.46"
},
"mode": "1904",
"change": "N"
},
{
"expiry": {
"cdexpiry": "v770",
"vlexpiry": "1001.56"
},
"mode": "1904",
"change": "N"
},
{
"expiry": [
{
"cdexpiry": "v130",
"vlexpiry": "2084.08"
},
{
"cdexpiry": "v260",
"vlexpiry": "28362.31"
}
],
"mode": "0213",
"change": "N"
},
{
"expiry": {
"cdexpiry": "v210",
"vlexpiry": "296.78"
},
"mode": "0101",
"change": "N"
},
{
"expiry": [
{
"cdexpiry": "v245",
"vlexpiry": "1495.37"
},
{
"cdexpiry": "v248",
"vlexpiry": "1440.37"
}
],
"mode": "0217",
"change": "N"
}
],
"type": "8"
}
我用了一些“如果”和“如果”--但我遗漏了一些东西。
for ($i = 0; $i < count($json_data->list); $i++) {
if(isset($json_data->list[$i]->expiry))
预期结果
|类型| 数值|
| - -|- -|
|莫代尔|0401|
|变化|否|
| 到期日|第130节|
| 数值|小行星33528.99|
| 到期日|第二百三十节|
| 数值|小行星21648.39|
| 到期日|第150章|
| 数值|185,350.30欧元|
|************************************************************************************|************************************************************************************|
|莫代尔|一九〇四年|
|变化|否|
| 到期日|第四十章|
| 数值|一千零九十一点四六|
| 到期日|v770版本|
| 数值|一千零一点五六|
|************************************************************************************|************************************************************************************|
|莫代尔|0213|
|变化|否|
| 到期日|第130节|
| 数值|小行星2084.08|
| 到期日|第二百六十章|
| 数值|小行星28362.31|
|************************************************************************************|************************************************************************************|
|莫代尔|0101|
|变化|否|
| 到期日|第210节|
| 数值|二百九十六点七八|
|************************************************************************************|************************************************************************************|
|莫代尔|0217|
|变化|否|
| 到期日|小行星245|
| 数值|一千四百九十五点三七|
| 到期日|小行星248|
| 数值|一千四百四十点三七|
这是原始XML查询返回文件link
“我需要将阵法中的所有数据都提取出来,以便以后进行操作,还请大师们帮忙!”
2条答案
按热度按时间2uluyalo1#
不幸的是,您有一个不一致的数组结构,因此不仅需要编写循环来访问每一层,还需要编写一个条件来适应偏离的子集结构。
代码:(Demo单击眼睛图标以呈现html输出)
lh80um4z2#
那个 JSON 的 结构 不 规则 , 你 确定 你 收到 的 是 真实 的 数据 吗 ? expiry 有时 候 是 数组 , 有时 候 是 对象 , 很 奇怪 。
看 一下 这个 例子 , 了解 如何 遍历 它 :
中 的 每 一 个
输出 为 :
格式
考虑 到 您 收到 的 JSON 数据 的 奇怪 结构 , 我 真 的 建议 您 尝试 修复 该 结构 , 而 不是 尝试 使用 该 结构 。 JSON 数据 中 意外 的 不同 格式 使 处理 变得 不 必要 的 复杂 。 我 看 不 出 有 什么 原因 。 API 响应 中 的 对象 应该 * 总是 * 具有 严格 和 统一 的 结构 。