逐行读取并将每15行分成多维数组

时间:2014-10-20 03:10:01

标签: php oop loops while-loop

我试图阻止文本变成块。

$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数组收集数据或者使用OOP类创建对象会更容易吗?

1 个答案:

答案 0 :(得分: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);