1

我有两个.txt文件需要阅读。两个文件的内容如下

日志.txt

2013/04/20 01:08:11

数据.txt

MANUFACTURER: SISYSTEM
MODELNAME: DX1
BIRTHDATE: 19710108
SEX: M

对于 log.txt,我需要存储第一行的日期并将其保存到 mySQL 数据库中。

对于 data.txt 我需要将每一行的信息存储到变量中。IE:

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

?>
4

4 回答 4

7

为什么在变量中需要它们?关联数组(“map”)是更简洁的方法

$result = array();
  // Your loop -->
  $parts = array_map('trim', explode(':', $line_of_text, 2)));
  $result[$parts[0]] = $parts[1];
于 2013-04-23T20:12:31.153 回答
3

使用变量变量: 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]);
于 2013-04-23T20:09:59.427 回答
3

while循环内,您可以比较该行以查看必须分配的变量:PHP: strcmp - Manual

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

可能你可以使用一个switch语句

<?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);
?>
于 2013-04-23T20:19:04.133 回答
3

注意:我不知道如何将值分配给新变量

您可以使用数组

我假设您刚刚提供了每个文件中内容的示例 - 这些模式可能会重复。在我回答你的问题之前,我认为重要的是你应该知道在文本文件中维护数据是一个非常糟糕的主意或很多原因。

以第二个文件为例,您有两种选择如何在 PHP 中管理这些数据 - 将您的数据视为一个表:

manufctr  model   birthdate   sex
SISYSTEM  DX1     19710108    M
SISYSTEM  DX2     19710305    F
...

您可以将每一行存储在一个数组中,也可以将每一列存储在一个数组中。生成的数组集本身可以存储在数组中。

你如何加载和解析数据取决于数据结构的一致性(每个条目是否总是这种格式,或者它可能有额外/缺失的属性)。是否将数据读入行或列取决于数据在文件中的存储方式以及您接下来打算对数据执行的操作。

$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;
}
于 2013-04-23T20:40:46.353 回答