在html表循环中回显php数组

时间:2018-03-06 01:20:56

标签: php html loops

请运行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>";
    }
}
?>

提前致谢..

4 个答案:

答案 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>';

只需使用每一行的密钥(ab)作为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>&nbsp;</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; radioask =&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,我们创建一个带有问题文本的新行,并为每个选择一个带有相应的身份。

这样的数组的方法,如果你想创建一个radio函数,它的数据包装和简洁是非常酷的。但如果您只想打印收音机的一些问题(需要创建一个全新的createRadio($radio)),它会有点无聊。

另一种选择是&#34;溶解&#34; $radio$radio中的$questions概念,@TCooper在答案中的作用。它会让你失去数据集中化(在这种情况下,差异非常小)。另一方面,优点是您可以更自由地修改您的问题和选择(限制问题的数量或限制选择的集合,您只需要更改相应的表格),并且不需要知道你如何设想$choices数组来调用$radio函数。