2014-10-20 33 views
1

我试图将文本块分隔出来。逐行读取并将每个15行分割为多维数组

$file = fopen("output.txt", "r"); 

while(! feof($file)) 
{ 
$line = fgets($file); 

    if (preg_match('/Enterprise Weekly Time Sheets Date:/',$line)){ 
    echo("<br>Time Sheet Date found "); 
     $data = explode(' ', $line); 
     echo sprintf("%40s\n", $data[5]); 
    } 
    if (preg_match('/UNREGISTERED COPY Selection Dates: /',$line)){ 
    echo("<br>Selection Dates found "); 
     $data = explode(' ', $line); 
     echo sprintf("%40s %40s\n", $data[4], $data[5]); 
    } 
    if (preg_match('/Id\#/',$line)){ 
    echo("<br>Id found "); 
     $data = explode(' ', $line); 
     echo sprintf("%40s %40s\n", $data[7], $data[1]); 
    } 
    if (preg_match('/TOTAL HOURS: /',$line)){ 

      $data = explode(' ', $line); 
     echo sprintf("%40s %40s %40s\n", $data[2], $data[4], $data[7]); 
    } 

} 

我已经解析了数据,并有权访问WHILE语句中的变量。

现在,当我浏览所有文本块时,我一直在覆盖数据。

根据最新的要求,我被要求提供一个更好的图像文本文件的样子。

在github上查看文件MultipleReport.txt

理想情况下,我正在逐行解析所有记录,每隔15行我preg_match并存储所有变量并将所有内容放入维数组中。

对于每行15个文本行,一个员工将具有所有的细节。
像这样:

$employees = [ 
1 => [ 
    'CreationDate' => "10-13-2014", 
    'SelectionDate1' => "09-29-2014", 
    'SelectionDate2' => "10-05-2014", 
    'Company' => "00010453", 
    'Id' => "000007062", 
    'Name' => "HAYES GILL", 
    'RegHours' => 40.00, 
    'OverHours' => 2.50, 
    'TotalHours' => 42.50, 
], 
2 => [ 
    'CreationDate' => "10-13-2014", 
    'SelectionDate1' => "09-29-2014", 
    'SelectionDate2' => "10-05-2014", 
    'Company' => "00010453", 
    'Id' => "000007081", 
    'Name' => "JONES TOM", 
    'RegHours' => 40.00, 
    'OverHours' => 12.50, 
    'TotalHours' => 52.50, 
] 
]; 

会是更容易通过Multidimesional阵列收集的数据或可能创建一个面向对象的类的对象?

+0

哪里是你的代码推动该容器内的值? – Ghost 2014-10-20 03:12:05

+0

我刚刚编辑它..我不认为这是必要的。 – hayonj 2014-10-20 03:17:11

+0

'file()'函数返回一个数组,每行代表该数组中的一个元素。 – 2014-10-20 03:17:29

回答

0

您是否尝试过使用索引构建数组?

$data = array(); 
$ct = 0; 
$ix = 0; 
foreach(file("output.txt") as $line){ 
    $ct++ 
    $lines[] = $line; 
    if($ct==15){ 
     $line = implode("\r\n",$lines); 
     $ct = 0; 
     $ix++; 
     if (preg_match('/Enterprise Weekly Time Sheets Date:/',$line)){ 
      echo("<br>Time Sheet Date found "); 
      $data[$ix] = explode(' ', $line); 
      echo sprintf("%40s\n", $data[5]); 
     } 
     if (preg_match('/UNREGISTERED COPY Selection Dates: /',$line)){ 
      echo("<br>Selection Dates found "); 
      $data[$ix] = explode(' ', $line); 
      echo sprintf("%40s %40s\n", $data[4], $data[5]); 
     } 
     if (preg_match('/Id\#/',$line)){ 
      echo("<br>Id found "); 
      $data[$ix] = explode(' ', $line); 
      echo sprintf("%40s %40s\n", $data[7], $data[1]); 
     } 
     if (preg_match('/TOTAL HOURS: /',$line)){ 
      $data[$ix] = explode(' ', $line); 
      echo sprintf("%40s %40s %40s\n", $data[2], $data[4], $data[7]); 
     } 
    } 
} 
print_r($data); 
+0

as $ ix $ line(这是一个错字)? - 我应该把这个,而不是完整的 – hayonj 2014-10-20 03:32:41

+0

while语句,这是一个很好的解决方案,但不完全是我所需要的。 – hayonj 2014-10-20 03:43:37

+0

我真的需要阻止每个15行,并通过他们解析后,他们已经被添加到阵列 – hayonj 2014-10-20 03:46:16