通过 .php 从文件中读取文本并将部分存储在变量中

read text from file via .php and store parts in variable

问题是从文件中读取文本并准备特定文本并将其保存到变量以插入到数据库中。像这里这样的东西: https://www.wdb24.com/php-read-text-file-and-insert-into-mysql-database/

Measurment/Import 数据如下:

    1=19-10-18 10:02:06
    2=+1.313026E+00 l/s 
    3=+1.671796E-01m/s
    4=+1.500691E+02m3 
    5=+1.501138E+02m3 
    6=+0.000000E+00m3 
    1=19-10-18 10:03:06
    2=+1.266786E+00 l/s 
    3=+1.612923E-01m/s
    4=+1.501403E+02m3 
    5=+1.501850E+02m3 
    6=+0.000000E+00m3 
    1=19-10-18 10:04:06
    2=+1.597391E+00 l/s 
    3=+2.033861E-01m/s
    4=+1.502291E+02m3 
    5=+1.502738E+02m3 
    6=+0.000000E+00m3
     .
     .
     . 

始终只有六个重复行中的前三行 (1=...2=...3=...) 需要存储在变量中,例如 $第一,$第二,$第三。 可能像数组一样,因为我需要将文本数据保存在数据库的一个字段中

$first=19-10-18 10:02:06,19-10-18 10:03:06,19-10-18 10:04:06 //从 1=

$second=+1.313026E+00,+2.333026E+00,+2.123026E+00 //从2=

$third=+1.671796E-01,1.87794E-01,1.34146E-01 //来自 3=

我有一小部分代码,请有人帮忙准备数据(插入数据库没有问题)。

    <?php

$file=fopen("test_file/test.txt", "r");

while(!feof($file)){

    $content=fgets($file);
    $content=explode(PHP_EOL,$content);  //break line?
    //list($first,$second,$third,$four,$five,$six)=$content;
    var_dump ($content); //result is some strange array, can't call $content[0] in some loop...


}


fclose($file);

?>

结果是不是有些奇怪的数组? 我是 php 初学者,在此先感谢您的任何建议,link...

如果您想知道最终产品是什么,那就是 google 从数据库中读取数据的图表。我认为每次测量都有 table 是不方便的,计划将其存储在:

编号 |时间戳 |值1 |值 2

1 |很多次 |许多值 |许多值

2 ............

因此在这种情况下,只有一个表格包含许多测量值。

您的代码将如下所示:

<?php

$handle = fopen("inputfile.txt", "r");
$lineVariables = [];
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $tmp = explode('=', $line);
        $lineVariables[trim($tmp[0])][] = trim($tmp[1]);
    }
    fclose($handle);

    $result = [];
    foreach ($lineVariables as $key => $variable) {
        $result[$key] = implode(', ', $variable);
    }

    echo '<pre>' . print_r($result, true) . '</pre>';
} else {
    // error opening the file.
}

输出:

Array
(
    [1] => 19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06
    [2] => +1.313026E+00 l/s, +1.266786E+00 l/s, +1.597391E+00 l/s
    [3] => +1.671796E-01m/s, +1.612923E-01m/s, +2.033861E-01m/s
    [4] => +1.500691E+02m3, +1.501403E+02m3, +1.502291E+02m3
    [5] => +1.501138E+02m3, +1.501850E+02m3, +1.502738E+02m3
    [6] => +0.000000E+00m3, +0.000000E+00m3, +0.000000E+00m3
)

说明

在 while 循环中,您阅读了以下行:

$line = fgets($handle)

然后你需要处理这些行。由于变量的索引是与要添加到行的行变量分隔的第一个字符,因此您可以使用 explode 函数,使用“=”字符作为分隔符。

然后在 $tmp 数组中你将有 2 个元素: $tmp[0] 将包含结果的索引。 $tmp[1] 将包含该行的其余部分。

例如第一行:

$tmp[0] // contains 1
$tmp[1] // contains 19-10-18 10:02:06

while 循环后,我们的 $lineVariables 将如下所示:

Array
(
[1] => Array
    (
        [0] => 19-10-18 10:02:06
        [1] => 19-10-18 10:03:06
        [2] => 19-10-18 10:04:06
    )

[2] => Array
    (
        [0] => +1.313026E+00 l/s
        [1] => +1.266786E+00 l/s
        [2] => +1.597391E+00 l/s
    )

[3] => Array
    (
        [0] => +1.671796E-01m/s
        [1] => +1.612923E-01m/s
        [2] => +2.033861E-01m/s
    )

[4] => Array
    (
        [0] => +1.500691E+02m3
        [1] => +1.501403E+02m3
        [2] => +1.502291E+02m3
    )

[5] => Array
    (
        [0] => +1.501138E+02m3
        [1] => +1.501850E+02m3
        [2] => +1.502738E+02m3
    )

[6] => Array
    (
        [0] => +0.000000E+00m3
        [1] => +0.000000E+00m3
        [2] => +0.000000E+00m3
    )

)

现在您可以关闭文件并专注于将结果格式化为所需的外观。我们将结果存储在 $result 变量中,它是一个数组,数组的一个元素将代表一个期望的结果,数组上的索引将是对第一个数字字符的引用行。

要为每一行追加 $lineVariable 的元素,我们可以使用 implode 函数,这与 explode 函数有点相反。对于单曲,这将转换为:

Array
    (
        [0] => 19-10-18 10:02:06
        [1] => 19-10-18 10:03:06
        [2] => 19-10-18 10:04:06
    )

进入这一行字符串:

19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06

所以我们只需要完成我们准备好的 $lineVariables 并将元素处理为所需的格式。

就是这样。