2013-12-19 25 views
1

我正在尋找創建一個簡單的文本文件,充滿了問題和單一的答案。基本佈局思路是:從文件中讀取Q&A的對?

[Q] Question 1 
[A] Answer 1 
[-] 
[Q] Question 2 
[A] Answer 2 
[-] 

每個答案之後是一個分隔符號[ - ]表明,Q/A組合是完整的。答案可以運行多行和/或包含一些基本的HTML。

如:

[Q] What is PHP ? 
    [A] <b>PHP</b> is a server-side scripting language designed for web development but also used as a general-purpose programming 
language.<br/>PHP is now installed on more than 244 million websites 
and 2.1 million web servers.<a href='#'>[2]</a><br/>Originally created 
by Rasmus Lerdorf in 1995, the reference implementation of PHP is now 
produced by The PHP Group 
    [-] 
    [Q] Question 2 
    [A] Answer 2 
    [-] 

的文本文件,將手工寫入和存儲在本地服務器上。所以如果需要的話可以改變佈局。但我確實希望能夠在格式中使用一些HTML。

我想嘗試做的是將這個文件讀取到一個php頁面,並通過每個Q/A對循環並將它們呈現在屏幕上。

答問會輸出類似於:

<a href="#" class="question">QUESTION</a> 
<div class="answer"> 
<strong>[Q] QUESTION</strong><br/> 
[A]ANSWER 
</div> 

有人點我在正確的方向讀取對,然後輸出它們。

謝謝:)

注:例如答案Q1從維基百科)

UPDATE: 這是我到目前爲止有: 問題:

[Q] Question 1 
[A] Answer 1 
[-] 
[Q] Question 2 
[A] Answer 2 
[-] 
[Q] Question 3 
[A] Answer 3 
[-] 
[Q] Question 4 
[A] <b>PHP</b> is a server-side scripting language designed for web development but also used as a general-purpose programming language.<br/>PHP is now installed on more than 244 million websites and 2.1 million web servers.<a href='#'>[2]</a><br/>Originally created by Rasmus Lerdorf in 1995, the reference implementation of PHP is now produced by The PHP Group 
[-] 
[Q] Question 5 
[A] Answer 5 
[-] 
[Q] Question 6 
[A] Answer 6 
[-] 

腳本:

<?php 
$handle = fopen("questions.txt","r"); 

if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     if (substr($line,0,3)==="[Q]") { 
      echo "<a href='#' class='question'>$line</a>"; 
      $question = $line; 
     } 

     if (substr($line,0,3)==="[A]") { 
      echo "<div class='answer'>"; 
      echo "<strong>$question</strong><br/>"; 
      echo "$line</div>"; 
     } 

     if (substr($line,0,3)==="[-]") { 
     echo "<br/>"; 
     continue; 
     } 

    } 
} else { 
    echo "Unable to open file"; 
} 

?> 

這可行,但它需要每個問題都是一條線。理想情況下,我想確保它們與Q/A對匹配,答案可以分成多行。

+0

你不能讓我們做所有的工作。你需要在這裏發佈你的努力,所以我們可以糾正它們。 –

+0

一些想法:使用語義結構,如HTML dd列表,或json結構或PHP ini文件,然後使用內置方法進行解析。否則,你最終編寫自己的解析器 - 爲什麼重新發明輪子? – bishop

+0

XML http://php.net/simplexml – Mark

回答

3

好吧,我們假設[Q][A][-]標籤將始終在一行的開頭。

我會設置一個變量,它保留內存中解析php腳本的文件part,然後讀取該行。這很簡單。另外,我以不同的方式管理$question。這應該做的伎倆。

<?php 
$handle = fopen("questions.txt","r"); 
$part = 0; 
$question = ""; 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     if (strlen($line) > 2) { 
      if (substr($line,0,3)==="[Q]") { 
       $part = 0; 
       echo "<a href='#' class='question'>".$line; 
       $question = $line; 
      } 

      else if (substr($line,0,3)==="[A]") { 
       $part = 1; 
       echo "</a><div class='answer'>"; 
       echo "<strong>".$question."</strong><br/>"; 
       $line = substr($line, 3, strlen($line)-3); 
       echo $line; 
      } 

      else if (substr($line,0,3)==="[-]") { 
       echo "</div><br/>"; 
       continue; 
      } 

      else { 
       echo $line; 
       if ($part == 0) 
        $question .= $line; 
      } 
     } 
     else { 
      echo $line; 
      if ($part == 0) 
       $question .= $line; 
     } 
    } 
} 
else { 
    echo "Unable to open file"; 
} 
?> 
+0

感謝這似乎工作:)是否有可能從答案剝離[A]? – MacMan

+0

只需挑選不包含前3個字符的子字符串。我已經編輯了答案中的代碼,還修復了最少長度爲3個字符的東西:) – Vereos

+0

謝謝 - 完美:) – MacMan