提问人:ejovrh2 提问时间:5/6/2020 更新时间:5/6/2020 访问量:1915
通过 .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/
测量/导入数据如下所示:
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、$second$third。 也许像数组一样,因为我需要将文本数据保存在数据库的一个字段中
$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);
?>
结果是一些看起来很奇怪的arrray吗? 我是php初学者,提前感谢您的任何建议,链接...
如果您想知道最终产品是什么,那么从数据库中读取数据的 google chart 就是。我认为每个测量都有表格是不方便的,计划是将其存储在以下位置:
编号 |时间戳 |值1 |价值观2
1 |多次 |many值 |manyValues
2 ............
因此,在这种情况下,只有一个具有许多测量值的 tabel 。
答:
您的代码将如下所示:
<?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)
然后,您需要处理这些行。由于变量的索引是与要添加到行中的行变量分开的第一个字符,因此可以使用使用“=”字符作为分隔符的分解函数。
然后在 $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
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
就是这样。
评论
for
6