我想将以下代码(以及每个问题的副本)包含在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个问题)创建一个文件。
什么是更简洁,优雅且适当的方式?谢谢!!
答案 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++;
}