我遇到了这个问题。比方说,例如我这些数据:
QZS-2 (QZSS/PRN 184)
1 42738U 17028A 17258.40853294 -.00000184 00000-0 00000-0 0 9994
2 42738 44.6467 288.3531 0740253 270.7360 80.8515 1.00267707 1090
这些线提供了有关卫星轨道的一些细节。第0行是名称,而第1行和第2行是轨道参数。
到目前为止,我已设法使用以下方法将这些行保存到mySQL数据库:
public function displayer() {
$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));
DB::table('tester')->insert($arrays);
dd($arrays);
}
这很好用,并设法创建我需要的3行。现在我想解决的问题是:
我正在尝试为五位数字创建一个单独的行(也称为norad_cat_id
)。例如:
2 42738 44.6467 288.3531 0740253 270.7360 80.8515 1.00267707 1090
会创建一个数字为42738
的行。因此每个卫星应该有4列数据:已经存在的三条线,现在是新的norad_cat_id
五位数。数据遵循标准:norad_cat_id
所在的行在其开头始终具有2
,然后是空格。
有时norad_cat_id
在数字的开头可以为零:例如:08513
。是否可以将8513
保存到没有零的数据库?
TL; DR
为norad_cat_id
添加/创建单独的行。
如果norad_cat_id
以零开头,则删除零。
修改 也许可以做一些事情(我在另一个答案中找到了这个):
$splitName = explode(' ', $name, 2);
$first_name = $splitName[0];
$last_name = !empty($splitName[1]) ? $splitName[1] : '';
这会分割名字和姓氏。也许可以从中得到一些东西?
答案 0 :(得分:1)
这是您修改后的代码,它将使用四列创建每一行:
public function displayer()
{
$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'];
$row = array_combine($columns, array_map('trim', $array));
// New line added
return array_merge($row, [
'norad_cat_id' => (int) explode(' ', end($row), 3)[1]
]);
}, array_chunk($lines, 3));
DB::table('tester')->insert($arrays);
}