我一直在努力创建一些可以将 txt 文件保存到 mySQL 数据库中的东西。我已经成功创建了一些可以保存 JSON 文件但不保存 txt 文件的东西。
这是有问题的 txt 文件:https://celestrak.org/NORAD/elements/sbas.txt 。此 txt 文件包含一些卫星及其数据。每颗卫星都恰好有三行,无一异常(exception)。例如,这是一颗卫星:
AOR-E (EGNOS/PRN 120)
1 24307U 96053A 17257.68868765 -.00000150 00000-0 00000-0 0 9992
2 24307 2.8040 77.2609 0004175 104.1816 44.8421 1.00271450 76939
第一行告诉我们卫星名称。接下来的两行为我们提供了一些参数,这些参数始终以数字 1
和 2
开头。此格式不会更改 - 0
行及其后面的两行(以 1
或 2
开头)上的名称。
我想要做的是为每颗卫星创建一行 - 列object_name
代表第0
行,tle_line1
对于 1
行和 tle_line2
对于 2
行。
我已经成功创建了一些东西,可以将 JSON 格式的数据保存到 SQL 数据库中。也许有些可以偏离这一点?
我使用 Laravel 和 Guzzle 来处理 HTTP 请求:
$api = new Client([
'base_uri' => 'https://celestrak.org',
]);
$response = $api->get('jsonlocater');
$data = json_decode($response->getBody()->getContents(), true);
foreach ($data as $attributes) {
$attributes = array_change_key_case($attributes, CASE_LOWER);
Satellites::create($attributes);
}
最佳答案
首先,我不确定您的响应格式是什么,但使用普通 PHP
您可以执行以下操作来获取数组中的内容:
$url = 'http://celestrak.com/NORAD/elements/sbas.txt';
$lines = file($url, FILE_IGNORE_NEW_LINES);
$arrays = array_map(function($array) {
$columns = ['object_name', 'tle_line1', 'tle_line2'];
return array_combine($columns, array_map('trim', $array));
}, array_chunk($lines, 3));
现在,如果您 dd($arrays)
结果,您将得到如下所示的结果:
根据此结果,您应该能够轻松地在数据库中创建条目。图像中的每个数组应该是数据库表中的一个条目/行。例如:
\DB::table('table_name')->insert($arrays);
请注意,如果您的表中有时间戳(created_at 和 Updated_at),那么您必须在生成数组时在每个数组中添加这些字段。
关于php - Laravel - 将 .txt 文件保存到 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46248306/