我的文字文件包含:
什么是狗?,宠物,人类,房子,火车
我想使用该数据制作一个多维数组并使用该数组以测验格式发布问题。
例如:
什么是狗?
[单选按钮] a。)宠物
[单选按钮] b。)一个人
等等
到目前为止,我编码......
<?php
$file = fopen ("data.txt","r");
$i=0;
while (feof($file)==false)
{
$line = fgets($file);
$array[$i]=$line;
$i=$i + 1;
}
fclose($file);
session_start();
$_SESSION["questions_array"]=$array;
?>
并回应阵列...
<?php
session_start();
$array=$_SESSION["questions_array"];
for ($i=0;$i<count($array);$i++)
{
echo $array[$i]."<br>";
}
?>
我的问题是它回声为:
什么是狗?,宠物,人类,房子,火车
而不是我想要的测验格式。我不知道如何将数组回显到我想要的格式。我到处寻找但没有得到解决方案。请帮我!
细节(只是非常清楚):
我想要关闭此文本文件:
什么是狗?,宠物,人类,房子,火车
进入一个多维数组并像这样回显:
什么是狗?
[单选按钮] a。)宠物
[单选按钮] b。)一个人
等等
答案 0 :(得分:0)
你可以爆炸线(http://php.net/explode)并使用例如问题的内部数组的数组元素0,以下用于答案。
$line = explode(',', $line);
$array[$i]=$line;
稍后:
echo $ array [$ i] [0]。 'br&gt;';
$ answers = count($ array [$ i]);
for($ j = 1; $ j&lt; $ answers; $ j ++){
echo $array[$i][$j] . '<br>';
}
答案 1 :(得分:0)
尽量避免像这样建模循环:for ($i=0;$i<count($array);$i++)
请参阅http://www.phpbench.com了解原因。
但是让我们仔细看看你的具体需求:
foreach($array as $source){
$data = explode(",", $source);
// Now $data[0] is the question, [1] is answer 1, etc.. etc..
echo "{$data[0]} <br>
<input type='radio' name='question' value='1'>{$data[1]} <br>
<input type='radio' name='question' value='2'>{$data[2]} <br>
<input type='radio' name='question' value='3'>{$data[3]} <br>
<input type='radio' name='question' value='4'>{$data[4]} <br>";
}
这应该让你走上正确的道路。
答案 2 :(得分:0)
基本上你会想要构建一个数组数组(这就是多维数组的结果)。
$quizItems=array();
$file = fopen ("data.txt","r");
while (feof($file)==false){
$line = fgets($file);
//This code assumes no commas in the question or answers.
$answers = explode(',', $line);
//pull the question into a variable
$question = $answers[0];
//remove the question from the list of answers
array_shift ($answers);
//add the array to your result array
$quizItems[]=array('question'=>$question, 'answers'=>$answers );
}
fclose($file);
var_dump($quizItems);
这里有效:http://codepad.org/lwOa7LNI
我的代码没有循环播放,我只是复制了两次代码以供说明。
<强>结果强>
array(2) {
[0]=>
array(2) {
["question"]=>
string(14) "What is a dog?"
["answers"]=>
array(4) {
[0]=>
string(6) " A pet"
[1]=>
string(8) " A human"
[2]=>
string(8) " A house"
[3]=>
string(8) " A train"
}
}
[1]=>
array(2) {
["question"]=>
string(14) "What is a car?"
["answers"]=>
array(4) {
[0]=>
string(10) " A vehicle"
[1]=>
string(7) " A tool"
[2]=>
string(9) " A number"
[3]=>
string(9) " A person"
}
}
}
基本用法
foreach ($quizItems as $quizItem){
echo '<b>'.$quizItem['question'].'</b><br />'.
implode('<br />', $quizItem['answers']);
}
<强>输出强>
What is a dog? A pet A human A house A train What is a car? A vehicle A tool A number A person
答案 3 :(得分:0)
如果你在一个问题中有','这个解决方案应该有效。仅当您的答案没有问号时,此方法才有效。
$question = substr($line, 0, strpos($line, '?'));
str_replace($question, '', $line);
$answers = explode(',', $line);
$array[$i] = $question;
foreach($answers as $answer)
{
$array[$i][] = $answer;
}
答案 4 :(得分:0)
您听说过fgetcsv
吗? :)
示例:强>
$file = fopen('data.txt', 'r');
$array = array();
while ($line = fgetcsv($file)) {
$array[] = $line;
}
一些改进:
此:
$array[$i]=$line;
$i=$i + 1;
......没用。它可能是:
$array[$i] = $line;
$i++;
......或更好:
$array[$i++] = $line;
......甚至更好(如我的例子所示):
$array[] = $line;
此处使用feof
也是多余的。如果达到EOF,fread
,fgets
和fgetcsv
已经返回false
。
输出:
以下是将其作为HTML输出的代码示例:
foreach ($array as $q => $data) {
echo '<p>'.array_shift($data).'</p>';
echo '<ul>';
foreach ($data as $a => $answer) {
echo '<li>'.
' <input type="radio" name="question-'.$q.'" id="question-'.$q.'"'.
' value="'.$a.'"/>'.
' <label for="question-'.$q.'">'.$answer.'</label>'.
'</li>';
}
echo '</ul>';
}