Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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 读对问答;A';档案里有什么?_Php_Text_File Io - Fatal编程技术网

Php 读对问答;A';档案里有什么?

Php 读对问答;A';档案里有什么?,php,text,file-io,Php,Text,File Io,我希望创建一个简单的文本文件,其中包含问题和单个答案。基本布局思想是: [Q] Question 1 [A] Answer 1 [-] [Q] Question 2 [A] Answer 2 [-] 每个答案后都有一个分隔符[-],表示Q/a组合已完成。答案可以跨越多行和/或包含一些基本HTML 例如: 什么是PHP? [A] PHP是为web开发设计的服务器端脚本语言,但也用作通用编程语言 PHP现在安装在超过2.44亿个网站上 和210万台web服务器。最初创建 Rasmus Lerdor

我希望创建一个简单的文本文件,其中包含问题和单个答案。基本布局思想是:

[Q] Question 1
[A] Answer 1
[-]
[Q] Question 2
[A] Answer 2
[-]
每个答案后都有一个分隔符[-],表示Q/a组合已完成。答案可以跨越多行和/或包含一些基本HTML

例如:

什么是PHP? [A] PHP是为web开发设计的服务器端脚本语言,但也用作通用编程语言 PHP现在安装在超过2.44亿个网站上 和210万台web服务器。
最初创建 Rasmus Lerdorf在1995年提出的PHP的参考实现现在是 由PHP小组制作 [-] [Q] 问题2 [A] 答复2 [-] 文本文件将手动写入并存储在本地服务器上。因此,如果需要,可以更改布局。但我确实希望能够在格式化中使用一些HTML

我想尝试的是将这个文件读入一个php页面,循环遍历每个Q/a对,并在屏幕上显示它们

问题和答案的输出类似于:

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

[Q]问题
[A] 答复
有没有人能给我指出正确的方向,让我读懂这些对,然后输出它们

谢谢:)

注:Q1的示例答案取自维基百科;)

更新: 到目前为止,我得到的是: 问题:

[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
[-]
[Q]问题1
[A] 答复1
[-]
[Q] 问题2
[A] 答复2
[-]
[Q] 问题3
[A] 答复3
[-]
[Q] 问题4
[A] PHP是一种服务器端脚本语言,设计用于web开发,但也用作通用编程语言。
PHP现在安装在超过2.44亿个网站和210万个web服务器上。
PHP的参考实现最初由Rasmus Lerdorf于1995年创建,现在由PHP组制作 [-] [Q] 问题5 [A] 答复5 [-] [Q] 问题6 [A] 答复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]
[-]
标记始终位于行的开头

我设置了一个变量,将php脚本解析文件的
部分保存在内存中,然后读取该行。这很简单。另外,我以不同的方式管理
$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";
}
?>

你不能让我们做所有的工作。您需要在这里发布您的工作,以便我们可以更正它们。一些想法:使用语义结构,如HTMLDD列表、json结构或PHPINI文件,然后使用内置方法进行解析。否则,您将编写自己的解析器——为什么要重新发明轮子?XML抱歉,我明天将发布一个示例。谢谢,这似乎是可行的:)是否可以从答案中去掉[A]呢?只需选择不包括前3个字符的子字符串。我已经编辑了答案中的代码,还修改了3个字符的最小长度:)
<?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";
}
?>