请运行html代码段https://codepen.io/anon/pen/YeoZQr,我想用数组和foreach这样做,我花了几个小时但没有成功,请任何帮助将不胜感激。
我的PHP代码:
<?
$do['a']['ask'] = 'Do you agree with me';
$do['a']['text'][] = 'Completely Agree';
$do['a']['text'][] = 'Agree';
$do['a']['text'][] = 'Neutral';
$do['a']['text'][] = 'Disagree';
$do['a']['text'][] = 'Completely Disagree';
$do['b']['ask'] = 'All people are differents';
$do['b']['text'][] = 'Completely Agree';
$do['b']['text'][] = 'Agree';
$do['b']['text'][] = 'Neutral';
$do['b']['text'][] = 'Disagree';
$do['b']['text'][] = 'Completely Disagree';
foreach($do as $key => $value)
{
$text= $do[$key]['text'];
foreach($text as $ask_key => $ask_value)
{
echo "<table>
<tr>
<td style=\"width:50%;\"></td>
<td>".$ask_value."</td>
</tr>
<tr>
<td>".$do[1]['ask']."</td>
<td><input type=\"radio\" name=".$key." value=".$ask_value." /></td>
</tr>
</table>";
}
}
?>
提前致谢..
答案 0 :(得分:0)
你可以做的一种方法是首先打印标题(至少我现在想的是)。然后在下一批打印输入。
echo '<table cellpadding=10>';
// print headers
echo '<tr><td></td>'; // empty cell
foreach ($do['a']['text'] as $text) {
echo "<th>{$text}</th>";
}
// print rows
foreach ($do as $key => $value) {
$ask = $value['ask']; // label for the row
$radio_value = $value['text']; // values for radio button for each row
echo '<tr>';
echo "<td>{$ask}</td>";
foreach ($radio_value as $radio) { // loop the values and create a list of radio buttons
echo "<td><input type=\"radio\" name=\"input[{$key}]\" value=\"{$radio}\" /></td>";
}
echo '</tr>';
}
echo '</tr>';
echo '</table>';
只需使用每一行的密钥(a
和b
)作为name属性,以便对它们进行分组,因此在表单上下文中有意义。
如果你也控制数组,是的,你可以通过分离问题和选择(如果选择是不变的)来简化它。
$questions = ['a' => 'Do you agree with me', 'b' => 'All people are differents'];
$choices = ['Completely Agree', 'Agree', 'Neutral', 'Disagree', 'Completely Disagree'];
echo '<table cellpadding=10>';
// print headers
echo '<tr><td></td>'; // empty cell
foreach ($choices as $text) {
echo "<th>{$text}</th>";
}
// print rows
foreach ($questions as $key => $question) {
echo '<tr>';
echo "<td>{$question}</td>";
foreach ($choices as $radio) { // loop the values and create a list of radio buttons
echo "<td><input type=\"radio\" name=\"input[{$key}]\" value=\"{$radio}\" /></td>";
}
echo '</tr>';
}
echo '</tr>';
echo '</table>';
应用相同的概念,打印标题然后打印问题。然后访问值也与表单中的值相同。使用适当的<form>
标记以及相应的method = POST / GET
(您可以选择),然后只需相应地访问它们:
$input = $_GET['input'];
// or
$input = $_POST['input'];
foreach ($input as $question_key => $selected_choice) {
// $question_key contains a or b
// $selected_choice contains the selected radio
// do what you have to do
}
如果您已经明白这一点,请忽略表单位部分。
答案 1 :(得分:0)
这是我的代码,它可以是完美的但它可以解决这个问题
form.fold (
errForm => {
BadRequest();
},
data => {
** update each column of the table after running db.run
}
)
答案 2 :(得分:0)
我认为最简单的解决方案是重写数组,因此您不会多次存储相同的数据。
$questions = ['a'=>'Do you agree with me','b'=>'All people are differents'];
$options = ['Completely Agree','Agree','Neutral','Disagree','Completely Disagree'];
echo "<table>";
echo "<tr><td> </td>";
foreach($options as $option){
echo "<td>".$option."</td>";
}
echo "</tr>";
foreach($questions as $id => $question){
echo "<tr><td>".$question."</td>";
foreach($options as $option){
echo "<td><input type=\"radio\" name=".$id." value=".$option." /></td>";
}
echo "</tr>";
}
echo "</table>";
?>
这假设您的答案选项永远不会改变。
答案 3 :(得分:0)
让它看起来像你的尝试,你可以做那样的事情
<?php
$radio = [
'questions' => [],
'choices' => []
];
$radio['questions']['a'] = 'Do you agree with me';
$radio['questions']['b'] = 'All people are differents';
$radio['choices'][] = 'Completely Agree';
$radio['choices'][] = 'Agree';
$radio['choices'][] = 'Neutral';
$radio['choices'][] = 'Disagree';
$radio['choices'][] = 'Completely Disagree';
echo "<table><tr><td style=\"width:50%;\"></td>";
foreach($radio['choices'] as $choice)
{
echo "<td>$choice</td>";
}
echo "</tr>";
foreach($radio['questions'] as $id => $question)
{
echo "<tr><td>$choice</td>";
foreach($radio['choices'] as $choice)
{
echo "<td><input type="radio" name='$id' value='$choice'/></td>";
}
echo "</tr>";
}
echo "</table>";
?>
修改:我更改了foreach($question)
,因为我昨天晚上只复制了您的示例,并没有设置value
标记。
所以,我想你注意到了,但我冒昧地重命名你的变量(do
=&gt; radio
,ask
=&gt; questions
,{{1 }} =&gt; text
)。避免重复数据的要点是明确哪个变量&#34;直接取决于&#34;另一个。
要创建整个广播,你需要一切(这个逻辑,因为这段代码只创建了所说的广播),所以我(就像你一样)制作了包含所有选择和问题的choices
表。
然后,我们有问题。要创建每个文件,您需要访问其文本,ID和整套$radio
。但由于choices
对于每个问题都是相同的,因此他们不需要&#34;拥有&#34;选择。什么&#34;取决于&#34;关于这个问题(每个问题可能会改变)只是它的id和文本。这就是我存储在每个choices
中的内容,$radio['questions']
=&gt;的关联数组$id
(再次和你一样)
正如前面所述,如果$question_text
不直接依赖于一个问题,那么他们就是choices
组的选择。所以他们直接属于radio
。
现在要创建无线电表,我们可以简单地迭代选择以创建第一行(标签),对于每个问题文本和id,我们创建一个带有问题文本的新行,并为每个选择一个带有相应的身份。
像
另一种选择是&#34;溶解&#34; $radio
和$radio
中的$questions
概念,@TCooper在答案中的作用。它会让你失去数据集中化(在这种情况下,差异非常小)。另一方面,优点是您可以更自由地修改您的问题和选择(限制问题的数量或限制选择的集合,您只需要更改相应的表格),并且不需要知道你如何设想$choices
数组来调用$radio
函数。