Laravel - 为mySQL数据库的{t}文件创建数据的单独行

时间:2017-09-16 17:11:25

标签: php mysql laravel laravel-5.4

我遇到了这个问题。比方说,例如我这些数据:

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] : '';

这会分割名字和姓氏。也许可以从中得到一些东西?

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);
}