如何将逗号分隔的文本文件转换为多维数组(使用单选按钮格式化)

时间:2012-04-19 18:14:14

标签: php multidimensional-array

我的文字文件包含:

什么是狗?,宠物,人类,房子,火车

我想使用该数据制作一个多维数组并使用该数组以测验格式发布问题。

例如:

什么是狗? [单选按钮] 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。)一个人 等等

5 个答案:

答案 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"
    }
  }
}

基本用法

http://codepad.org/4Zhr9Wje

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,freadfgetsfgetcsv已经返回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>';
}