1

私のテキストファイルには次のものが含まれています。

犬とは?、ペット、人間、家、電車

そのデータを使用して多次元配列を作成し、その配列を使用して質問をクイズ形式で投稿したいと思います。

例えば:

犬とは何ですか?
[ラジオボタン]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。)人間
など

4

5 に答える 5

0

行を展開して(http://php.net/explode)、たとえば、質問に内部配列の配列要素0を使用できます。回答には、以下が使用されます。

$line = explode(',', $line);
$array[$i]=$line;

後で:

echo $ array [$i][0]。'br>';

$ Answers = count($ array [$ i]);

for($ j = 1; $ j <$ Answers; $ j ++){

echo $array[$i][$j] . '<br>'; 

}

于 2012-04-19T18:19:08.460 に答える
0

このようなループのモデリングは避けてください。理由については、 httpfor ($i=0;$i<count($array);$i++) : //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>";
}

それはあなたを正しい道に導くはずです。

于 2012-04-19T18:23:58.547 に答える
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

コードがループしません。説明のためにコードを2回コピーしました。

結果

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
于 2012-04-19T18:27:11.837 に答える
0

このソリューションは、質問に「、」がある場合に機能するはずです。これは、回答に疑問符がない場合にのみ機能します。

$question = substr($line, 0, strpos($line, '?'));
str_replace($question, '', $line);
$answers = explode(',', $line);
$array[$i] = $question;
foreach($answers as $answer)
{
  $array[$i][] = $answer;
}
于 2012-04-19T18:30:52.393 に答える
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も冗長です。freadfgetsおよびEOFに達した場合は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>';
}
于 2012-04-19T18:31:16.343 に答える