2016-08-18 65 views
1

大家好,我有txt文件具有以下內容:過濾文本文件轉換成HTML表在PHP

Name  : MyName1 
    State  : Apt 
    PathName : C:\xx\MyName1.txt 

    Name  : MyName2 
    State  : Apf 
    PathName : C:\xx\MyName2.txt 

    Name  : MyName3 
    State  : Apf 
    PathName : C:\xx\MyName3.txt 

有沒有辦法通過使用PHP代碼到這個文本文件導入HTML表轉換是這個樣子:

 Name  State PathName 
     MyName1  Apt  C:\xx\MyName1.txt 
     MyName2  Apf  C:\xx\MyName2.txt 
     MyName3  Apf  C:\xx\MyName3.txt 
+2

請告訴我們以任何方式努力嘗試,這解決了自己,這個論壇是不是讓人們做你的工作;) –

+5

'有任何方式'。就在這裏。 –

回答

2

你可以嘗試的file_get_contents()混合,foreach() & preg_replace()對於像下面的註釋代碼說明:

TXT文件的內容:

Name  : MyName1 
    State  : Apt 
    PathName : C:\xx\MyName1.txt 

    Name  : MyName2 
    State  : Apf 
    PathName : C:\xx\MyName2.txt 

    Name  : MyName3 
    State  : Apf 
    PathName : C:\xx\MyName3.txt 

表生成算法:

<?php 

     $txtFile  = __DIR__ . "/test.txt"; //<== PATH TO THE TXT FILE 
     $txtFileData = file_get_contents($txtFile); 

     // CONVERT $txtFileData TO ARRAY BY SPLITTING AT THE NEW-LINE BOUNDARY. 
     $arrTxtData  = explode("\n", $txtFileData); 
     $sections  = array(); 
     $index   = 0; 

     // LOOP THROUGH THE ARRAY (FROM ABOVE) AND BUILD SECTION GROUPS 
     // USING THE EMPTY LINE AS THE CUE-POINT FOR THE NEXT SECTION GROUP 
     foreach($arrTxtData as $line){ 
      if(!empty(trim($line))){ 
       $sections[$index][] = trim($line); 
      }else{ 
       $index++; 
      } 
     } 

     // EXTRACT THE VALUES FOR THE TABLE HEADINGS... 
     $extract = $sections[0]; 
     $heading1 = preg_replace("#(\t|\s)*?(\:.*)$#", "", $extract[0]); 
     $heading2 = preg_replace("#(\t|\s)*?(\:.*)$#", "", $extract[1]); 
     $heading3 = preg_replace("#(\t|\s)*?(\:.*)$#", "", $extract[2]); 

     // BUILD THE HEAD-SECTION OF YOUR TABLE... 
     $output  = "<table class=''>" . PHP_EOL; 
     $output .= "<tr class=''>" . PHP_EOL; 
     $output .= "<th class=''>{$heading1}</th>" . PHP_EOL; 
     $output .= "<th class=''>{$heading2}</th>" . PHP_EOL; 
     $output .= "<th class=''>{$heading3}</th>" . PHP_EOL; 
     $output .= "</tr>" . PHP_EOL; 
     $output .= "<tbody>" . PHP_EOL; 

     // LOOP THROUGH ALL THE SECTIONS AND BUILD YOUR ROWS + CELLS 
     foreach($sections as $section){ 
      $output.= "<tr>" . PHP_EOL; 
      foreach($section as $data){ 
       $strVal = preg_replace("#(^.*?\:\s*?)#", "", $data); 
       $output.= "<td class=''>{$strVal}</td>" . PHP_EOL; 
      } 
      $output.= "</tr>" . PHP_EOL; 
     } 
     // CLOSE OFF THE <TBODY> AND <TABLE> TAGS 
     $output .= "</tbody>" . PHP_EOL; 
     $output .= "</table>" . PHP_EOL; 

     // ECHO THE RESULTING OUTPUT [THE TABLE] 
     echo $output; 

結果ECHO聲明:您已採取

 Name  State PathName 
     MyName1  Apt  C:\xx\MyName1.txt 
     MyName2  Apf  C:\xx\MyName2.txt 
     MyName3  Apf  C:\xx\MyName3.txt 
+0

只是因爲努力而投了票 –

+0

我也是,因爲它給了OP他們想要的結果,而其他答案不會 - 不是SO是免費代碼服務,而是努力':)' –

0
// Read the contents of the file 
$file = file_get_contents("someFile.txt"); 

// convert the file contents to lines of text 
$lines = explode("\r\n", $ file); 

現在您可以訪問任何數據線$線陣列英寸

0

如果你不知道如何下手這個問題, 使用PHP的爆炸與單排的所有信息來劃分長字符串 像:

$array = explode (" : ", $string); 

這將劃分串的每一行各地在:標誌, 這種方式,您有一個數組,像這樣:

$array = [ 
    "Name", 
    "Mynam1", 
    "State", 
    "Apt", 
    "..." 
]; 

然後,你可以通過每個項目使用一個for循環循環並將其存儲爲一個鍵值對,meanin g,每當一個rray項有一個偶數的keynumber時:0,2,4等等......它將是你想要的鍵的名字(NAME,STATE,...),你可以將它和它結合成結果數組連同它的價值將成爲下一個項目(所以$x + 1)。

for($x = 0, $x < count($array); $x++) { 
    if ($x % 2 == 0) { 
     $result_array["$array[$x]_$x"] = $array[$x+1]; 
    } 
} 

使用這種方法,你會得到這樣一個數組:

$result = [ 
    "Name_1" => "Mynam1", 
    "State_1" => "Apt", 
    "..." 
]; 

現在從那裏出來,你應該嘗試和努力,爲您的需求,讓你可以使用它作爲需要:)

祝你好運!