在php变量中包含<!-?php /?->

时间:2018-08-28 07:39:56

标签: php html

我想将以下代码(以及每个问题的副本)包含在php变量中,作为数组的一部分,我可以将其改组以使调查中的问题顺序随机化。

text of question  
<br> 
<input type="radio" name="q1" <?php if (isset($q1) && $q1=="yes") echo "checked";?> value='1'>Yes 
<input type="radio" name="q1" <?php if (isset($q1) && $q1=="no") echo "checked";?> value='-1'>No 
<br><br>

到目前为止,我发现的唯一解决方案是仅将代码保存到php文件中,并将该文件输入变量中。最终结果如下所示:

$q1Text = file_get_contents('\q1.php')
$q2Text = file_get_contents('\q2.php')
$q3Text = file_get_contents('\q3.php')
$q4Text = file_get_contents('\q4.php')
$q5Text = file_get_contents('\q5.php')
$q6Text = file_get_contents('\q6.php')
$questions=array($q1Text, $q2Text, $q3Text, $q4Text, $q5Text, $q6Text);
shuffle($questions);
$count='1';
foreach ($questions as $value) {
    echo $count;
    echo ") $value ";
    $count++;
}

这种方法效果很好,但是我需要为每个问题(我有35个问题)创建一个文件。

什么是更简洁,优雅且适当的方式?谢谢!!

4 个答案:

答案 0 :(得分:1)

实际上,您可以直接包括您的问题文件。但是您需要对其进行一些编辑以添加PHP开始标记。

所以您的问题文件变成了:

<?php

?>
text of question  
<br> 
<input type="radio" name="q1" <?php if (isset($q1) && $q1=="yes") echo "checked";?> value='1'>Yes 
<input type="radio" name="q1" <?php if (isset($q1) && $q1=="no") echo "checked";?> value='-1'>No 
<br><br>
<?php

?>

您的foreach变得像您不需要file_get_contents(),因为include将读取并执行问题文件中的代码:

它变成了:

$q1Text = '\q1.php';
$q2Text = '\q2.php';
$q3Text = '\q3.php';
$q4Text = '\q4.php';
$q5Text = '\q5.php';
$q6Text = '\q6.php';

$questions=array($q1Text, $q2Text, $q3Text, $q4Text, $q5Text, $q6Text);

shuffle($questions);
$count='1';

foreach ($questions as $value) {

    echo $count;
    echo ") ";

    include($value);

    $count++;
}

对问题文件的包含路径一无所知,仅此而已。

如果您需要更多说明,请随时询问!

答案 1 :(得分:1)

将问题存储为 数据 (而不是代码),然后使用代码输出:

$questions = [
    ['Text of question', ['Yes', 'No']],
    ...
];

这仅使用一个数组数组,其中第一项是问题,第二项是答案数组。使用您自己的约定来最好地表达您需要的数据结构…

shuffle($questions);  // or whatever

foreach ($questions as $i => $question) : ?>

<p><?= $question[0]; ?></p>
<br>
<php foreach ($question[1] as $answer) : ?>
    <input type="radio" name="q<?= $i ?>" <?php if (isset(${"q$i"}) && ${"q$i"} == $answer): ?>checked<?php endif; ?> value="<?= $answer ?>"><?= $answer ?>
<?php endforeach; ?>

<?php endforeach; ?>

这绝不是完美的代码,但它朝着正确的方向发展。根据需要调整自己的状况。

答案 2 :(得分:0)

var_export能够将数组数据写为可解析的PHP源代码。您需要在此函数输出的内容周围添加<?php $varname =; ?>,以创建一个文件,您可以使用include / require轻松嵌入该文件。

除了直接将可执行的PHP代码写入文件之外,您还可以将数据编码为JSON,将其写入文件,然后在从文件中读取回来后再次对其进行解码。

答案 3 :(得分:0)

如果所有问题都是是/否问题,我将尝试另一种方法。 不必包含文件,您只需将问题编号和文本放入关联数组中,然后在循环中生成表格即可。

这样,您不必编写许多文件,而只需编写一次表单代码。

$questions = [
     ["number" => 1, "text" => "First question's text"],
     ["number" => 2, "text" => "Second question's text"],
     ["number" => 3, "text" => "Third question's text"]
];

$count = 1;

foreach ($questions as $value) {
   $question = "q".$value['number'];

   echo "$count) ".$value["text"];

   echo "<br>";
   echo '<input type="radio" name="'.$question.'" ';
   if (isset($$question) && $$question=="yes") {
      echo "checked";
   }
   echo ' value="1">Yes';
   echo '<input type="radio" name="'.$question.'"';
   if (isset($$question) && $$question=="no") {
      echo "checked";
   }       
   echo ' value="-1">No';
   echo '<br><br>';

   $count++;
}

但是,如果您有不同类型的问题,我将使用Inazo答案的修改版本。

$questions = array();
$number_of_questions = 35;

/* generate questions array */
for($i = 1; $i <= $number_of_questions; $i++){
  if file_exists("./q$i.php"){
    array_push($questions,"./q$i.php");
  }
}

shuffle($questions);
$count = 1;

/* generate your form */
foreach ($questions as $value) {

   echo "$count) ";

   include($value);

   $count++;
}