对于noobie问题,我很抱歉,我正在尝试将一些json数据保存到我的数据库中。问题是,我不知道如何获得任何“parent_names”。 “parent_name”始终与子“name”相同。
价格data.json
[
{
"Flag": {
"name": "Flag",
"safe_price": "118.31",
"safe_net_price": "110.60",
"total_volume": 3148,
"7_days": {
"median_price": "118.31",
"lowest_price": "100.00",
"highest_price": "132.25",
"volume": 94
}
},
"Pole": {
"name": "Pole",
"safe_price": "81.21",
"safe_net_price": "70.62",
"total_volume": 1,
"7_days": {
"volume": 0
}
},
"Net": {
"name": "Net",
"safe_price": "0.89",
"safe_net_price": "0.84",
"total_volume": 763,
"7_days": {
"median_price": "0.89",
"lowest_price": "0.65",
"highest_price": "1.08",
"volume": 30
}
}
}
]
PHP
$filename = "price-data.json";
$data = file_get_contents($filename);
$array = json_decode($data, true);
foreach($array as $row)
{
$sql = "INSERT INTO table_all_prices(parent_name, name, safe_price, safe_net_price, total_volume, median_price, lowest_price, highest_price, volume) VALUES (
'".$row["parent_name"]."',
'".$row["parent_name"]["name"]."',
'".$row["parent_name"]["safe_price"]."',
'".$row["parent_name"]["safe_net_price"]."',
'".$row["parent_name"]["total_volume"]."',
'".$row["parent_name"]["7_days"]["median_price"]."',
'".$row["parent_name"]["7_days"]["lowest_price"]."',
'".$row["parent_name"]["7_days"]["highest_price"]."',
'".$row["parent_name"]["7_days"]["volume"]."'
)";
}
echo "All Prices inserted to database";
答案 0 :(得分:0)
您需要从循环中的当前数组级别访问密钥,您可以通过
执行此操作 foreach($array as $parent_name => $row)
在$row
变量之前添加一个变量,将其视为数组访问
array( 'key' => 'value' )
同样的交易。现在因为你在" parent_name"您不需要在其中放置附加访问密钥的阵列级别。所以对于这个
$row["parent_name"]["7_days"]["volume"]
你可以做到
$row["7_days"]["volume"]
因为你将在json的这一部分工作
"name": "Net",
"safe_price": "0.89",
"safe_net_price": "0.84",
"total_volume": 763,
"7_days": {
"median_price": "0.89",
"lowest_price": "0.65",
"highest_price": "1.08",
"volume": 30
}
然后因为你的json [{ .. }]
那个方括号上有一个外部数组包装器。您可能需要$array[0]
或$array = reset($array)
。重置可能更好(如果事实证明是这种情况),因为如果数组为空,您将避免来自PHP的一些警告消息。从本质上讲,尝试访问0
的密钥,如果它是空的,会给你一个未定义的索引警告..