【问题标题】:Using Multidimensional Array to file JSON data to SQL database使用多维数组将 JSON 数据归档到 SQL 数据库
【发布时间】: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


【解决方案1】:

您是否期待这个,将键映射到其他键。

Try this code snippet here

<?php

ini_set('display_errors', 1);
$json = array(
    'name' => 'Venue Name',
    'street' => 'Street Name',
    'city' => 'City',
    'country' => 'United Kingdom',
    'zip' => 'NE123ER',
    'id' => 'API Identifier'
);
$venue_tree = array(
    'name' => 'name',
    'street' => 'address_line_1',
    'city' => 'city',
    'country' => 'country',
    'zip' => 'postcode',
    'id' => 'facebook_id');
$result=array();
foreach($venue_tree as $key => $changedKey)
{
    $result[$changedKey]=$json[$key];
}
print_r($result);

输出:

Array
(
    [name] => Venue Name
    [address_line_1] => Street Name
    [city] => City
    [country] => United Kingdom
    [postcode] => NE123ER
    [facebook_id] => API Identifier
)

【讨论】:

    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 2015-06-29
    • 2015-12-21
    • 2016-12-07
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多