【发布时间】:2017-09-30 06:19:57
【问题描述】:
我正在编写一个脚本,它使用 CURL 从 API 获取 JSON 数据。在研究如何将数据从 JSON 存储到数据库本身时,我感到有些困惑。
该表显示了 JSON 键和相应的 SQL 列标题。
----------------------------
| JSON | MySQL |
----------------------------
| name | name |
| street | address_line_1 |
| city | city |
| country | country |
| zip | postcode |
| id | api_id |
----------------------------
返回了几种不同的 JSON 数据树,其中键名与数据库中的名称完全无关,因此总体而言,让 SQL 标题与键匹配是不可能的。
假设我已经在返回的 JSON 上获取并运行 JSON_DECODE。
$json[0] = (
['name'] => 'Venue Name',
['street'] => 'Street Name',
['city'] => 'City',
['country'] => 'United Kingdom',
['zip'] => 'NE123ER',
['id'] => 'API Identifier'
);
而且我已经成功使用下面的代码输出了所有项目(返回的部分数据是嵌套的,比如本例)。
foreach($json as $event)
{
$iter = new RecursiveArrayIterator($event);
foreach(new RecursiveIteratorIterator($iter) as $key => $value) {
if($iter->hasChildren())
{
if($key === 'id'){
} elseif($key === 'name'){
} elseif($key === 'street'){
} elseif($key === 'city'){
} elseif($key === 'country'){
} elseif($key === 'zip'){
}
}
}
}
我知道我基本上需要最终得到一个数据数组,然后我才能将其写入 MySQL 数据库。
$mysql_write[0] = (
['name'] => 'Venue Name',
['address_line'] => 'Street Name',
['city'] => 'City',
['country'] => 'United Kingdom',
['postcode'] => 'NE123ER',
['api_id'] => 'API Identifier'
);
但我不知道如何更改密钥。一个想法是制作一个转换树类型的东西,其中它们的键将是当前目标,而值将在写入新数组以进行 SQL 写入时使用。
$venue_tree = array(
array('name' => 'name'),
array('street' => 'address_line_1'),
array('city' => 'city'),
array('country' => 'country'),
array('zip' => 'postcode'),
array('id' => 'facebook_id')
);
但在这一点上,我自己都糊涂了。这对任何人都有意义吗?
【问题讨论】:
-
简而言之,您能说说您的输入和预期输出吗?
-
刚刚进行了快速编辑。 $json 数组是输入,$mysql_write 是预期输出。对此感到抱歉。
-
$mysql_write[0]和$json[0]看起来一样吗? -
你当前的 SQL 语句是什么?
-
$json 的关联键来自 API 返回的信息。 $mysql_write 的关联键与需要写入数据的表头匹配。我基本上需要交换两者。
标签: php mysql json multidimensional-array