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

通过.php从文件中读取文本,并将部分存储在变量中,php,text,feof,Php,Text,Feof,问题是从文件中读取文本,准备并将特定文本保存到变量中,以便插入数据库。比如这里: 测量/导入数据如下所示: 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=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//from 1=

$second=+1.313026E+00、+2.333026E+00、+2.123026E+00//from 2=

$THORTH=+1.671796E-01,1.87794E-01,1.34146E-01//从3开始=

我有一小部分代码,请有人帮助准备数据(插入到数据库中不是问题)


您的代码如下所示:

<?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
    (
        [0] => 19-10-18 10:02:06
        [1] => 19-10-18 10:03:06
        [2] => 19-10-18 10:04:06
    )
解释 在while循环中,您使用以下命令读取行:

$tmp[0] // contains 1
$tmp[1] // contains 19-10-18 10:02:06
然后您需要处理这些行。由于变量的索引是从要添加到行的行变量中分离出来的第一个字符,因此可以使用“=”字符作为分隔符的函数

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

例如,第一行:

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
    )

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

<?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
    (
        [0] => 19-10-18 10:02:06
        [1] => 19-10-18 10:03:06
        [2] => 19-10-18 10:04:06
    )
现在,您可以关闭该文件并将重点放在将结果格式化为所需的外观上。我们将结果存储在
$result
变量中,该变量是一个数组,数组的一个元素将表示一个所需的结果,数组上的索引将是对行的第一个数字字符的引用

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

19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06
在这一行字符串中:

因此,我们只需完成准备好的
$lineVariables
并将元素处理为所需的格式


就是这样。

您的“explode()”调用不会有多大用处,因为您正在用“行尾”字符拆分一行文本,因此实际上不会改变任何内容。如果改为使用“=”将其分解,会发生什么情况?这应该是一个两元素数组,您的代码只需要检查第一个元素的值,看看如何处理第二个元素。如果您认为在一个数据库列中存储多个值是一个好主意,您应该重新考虑这个主意,因为它通常不是。我从这里开始,这会很快将各条线放入一个数组中,然后可以简单地循环。我可能会对
循环使用
,每次将循环计数器增加
6
。然后,您可以使用当前循环索引、当前循环索引加1和当前循环索引加2直接访问您感兴趣的行中的值。顺便问一下,这与您去年11月提出的问题有何不同?你在那里得到的回答应该已经能够帮助你推进这项工作,那么你为什么现在又问这个问题呢?@CBroe,这是我几个月前开始学习一些新东西的项目。我完全忘了我问过这样一个问题:为什么会是这样?请分享一些解释,以便其他人可以从中学习。如果还有任何问题,我可以扩展它。@DavidHlavati,非常感谢,它很有效。你的代码需要多学习一点。
19-10-18 10:02:06, 19-10-18 10:03:06, 19-10-18 10:04:06