Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP读取.txt文件并将信息存储到变量中_Php_Text - Fatal编程技术网

使用PHP读取.txt文件并将信息存储到变量中

使用PHP读取.txt文件并将信息存储到变量中,php,text,Php,Text,我有两个文本文件需要阅读 log.txt 2013/04/20 01:08:11 及 对于log.txt,我需要存储第一行的日期,并将其保存到mySQL数据库中 对于data.txt,我需要将每行的信息存储到变量中。i、 e: $manufacturer = SISYSTEM; $modelname = DX1; $birthdate = 19710108; $sex = M; 对于log.txt,我可以简单地使用fget读取第一行并存储到一个变量中。然而,对于data.text,我很

我有两个文本文件需要阅读

log.txt 

2013/04/20 01:08:11

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

对于data.txt,我需要将每行的信息存储到变量中。i、 e:

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

?>

使用变量:

在while循环中使用:

$line_of_text = fgets($file_handle);
$parts = explode(':', trim($line_of_text), 2);
${strtolower($parts[0])} = trim($parts[1]);

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

$result = array();
  // Your loop -->
  $parts = array_map('trim', explode(':', $line_of_text, 2)));
  $result[$parts[0]] = $parts[1];

在该行中,您可以比较该行,以查看要指定的变量:


我不知道如何将这些值赋给新的变量

使用

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

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

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;
}
$read=array();
while(true){
$record=array();

对于($x=0;$xuse)csv文件函数
$parts[]=explode(…)
。然后,$parts将是一个名称/值对数组。究竟为什么要将其全部放入单独的变量中?以后您将不知道实际获取了什么…data.txt:file\u handle:oops!最好检查“制造商”等。@τεκ已更改。(限制为爆炸)只需添加逻辑,在脚本获取下一组数据时重置数组,假设有多个数据集。@Robert我希望我的回答正确(看起来像是从智能手机上写的?)我认为“此文件中有多条记录”超出了这个问题的范围,因为我们还需要知道不同的记录是如何相互分离的。而且“变量-变量”方法也会遇到同样的问题:)但是,第一行已经提到了如何重置结果结构:
$result=array()
@KingCrunch能否简要解释每一行的工作原理?特别是数组映射?我如何调用这些变量来存储在SQL数据库中?@alchuang对PHP的一些基本了解可能很有用…
$result
最后是一个关联数组,因此您可以像往常一样检索值:
$result['MODELNAME']
<?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);
?>
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;
}