我有两个需要阅读的文本文件
log.txt
2013/04/20 01:08:11
和
data.text
MANUFACTURER: SISYSTEM
MODELNAME: DX1
BIRTHDATE: 19710108
SEX: M
对于log.txt,我需要存储第一行的日期并将其保存到mySQL数据库中。
对于data.txt,我需要将每行的信息存储到变量中。即:
$manufacturer = SISYSTEM;
$modelname = DX1;
$birthdate = 19710108;
$sex = M;
对于log.txt,我只需使用fget读取第一行并存储到一个变量中。但是,对于data.text,我无法弄清楚如何在循环中存储多个变量。这是我到目前为止所做的,但我不知道每次通过while循环时如何将值分配给新变量。任何帮助表示赞赏!
<?PHP
$file_handle = fopen("data.txt", "r");
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle);
$parts = explode(':', trim($line_of_text) );
}
fclose($file_handle);
?>
答案 0 :(得分:6)
为什么在变量变量中需要它们?关联数组(“map”)是更清洁的方法
$result = array();
// Your loop -->
$parts = array_map('trim', explode(':', $line_of_text, 2)));
$result[$parts[0]] = $parts[1];
答案 1 :(得分:2)
使用变量变量:http://php.net/manual/en/language.variables.variable.php
在你的while循环中使用:
$line_of_text = fgets($file_handle);
$parts = explode(':', trim($line_of_text), 2);
${strtolower($parts[0])} = trim($parts[1]);
答案 2 :(得分:2)
在这段时间内,您可以比较该行,看看您有什么变量符号: http://php.net/manual/en/function.strcmp.php
<?php
$file_handle = fopen("data.txt", "r");
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle);
$parts = explode(':', trim($line_of_text) );
if (strcmp($parts[0], "MANUFACTURER")==0)
$MANUFACTURER = trim($parts[1]);
if (strcmp($parts[0], "MODELNAME")==0)
$MODELNAME = trim($parts[1]);
[...]
else
echo "I haven't recognised that: ".$parts[0];
}
fclose($file_handle);
?>
可能你可以使用开关
<?php
$file_handle = fopen("data.txt", "r");
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle);
$parts = explode(':', trim($line_of_text) );
switch($parts[0])
case 'MANUFACTUREER':
$manufactureer = $parts[1];
break;
case 'MODELNAME':
$modelname = $parts[1];
break;
[...]
}
fclose($file_handle);
?>
答案 3 :(得分:2)
我不知道如何将值分配给新变量
使用arrays。
我假设您刚刚提供了每个文件中的内容示例 - 这些模式可能会重复。在我回答你的问题之前,我认为重要的是你应该知道在文本文件中维护数据是一个非常错误的想法或许多原因。
以第二个文件为例,您有两种选择如何在PHP中管理这些数据 - 将您的数据视为一个表:
manufctr model birthdate sex
SISYSTEM DX1 19710108 M
SISYSTEM DX2 19710305 F
...
您可以将每行存储在数组中,也可以将每列存储在数组中。结果数组本身可以存储在一个数组中。
如何加载和解析数据取决于数据结构的一致性(eah条目总是这种格式,或者它可能有额外/缺少的属性)。是否将数据读入行或列取决于数据在文件中的存储方式以及下一步要对数据执行的操作。
$read=array();
while (true) {
$record=array();
for($x=0; $x<4; $x++) {
$line_of_text = fgets($file_handle);
list($k, $v) = explode(':', $line_of_text );
$record[strtolower(trim($k))]=trim($v);
}
$read[]=$record;
if (feof($file_handle) break;
}