HTML: 单选按钮数组

3

好的,那么,当处理单选框数组时,我遇到了不同种类的问题。

我希望根据所选答案,将其值保存在不同的数组中,但我不希望用户能够从同一问题中选择多个选项。

例如:

Question 1
<input type="radio" name="Array1[]" value="question1"/>
<input type="radio" name="Array2[]" value="question1"/>
<input type="radio" name="Array3[]" value="question1"/>
<input type="radio" name="Array4[]" value="question1"/>

Question 2
<input type="radio" name="Array1[]" value="question2"/>
<input type="radio" name="Array2[]" value="question2"/>
<input type="radio" name="Array3[]" value="question2"/>
<input type="radio" name="Array4[]" value="question2"/>

这么做的目的是为了将问题本身分为4个类别,并将每个数组填充为被分配到它们的问题。

例如:

假设有4个问题,回答为1、3、1、2,则我想要的结果数组将是:

Array1[0] = "question1"
Array1[1] = "question3"

Array2[0] = "question4"

Array3[0] = "question3"

Array4[] = Empty array

这个能做到吗,还是我需要采用不同的方法来达到期望的输出?顺便说一下,我打算使用PHP处理这个表单。

编辑:更多细节。一个例子用法。

<h1>What are your preferences?</h1>
<form type=...etc.>
    <label>Cats</label>
    <input type="radio" name="Love[]" value="Cats"/>
    <input type="radio" name="Like[]" value="Cats"/>
    <input type="radio" name="Dislike[]" value="Cats"/>
    <input type="radio" name="Hate[]" value="Cats"/>
    <label>Dogs</label>
    <input type="radio" name="Love[]" value="Dogs"/>
    <input type="radio" name="Like[]" value="Dogs"/>
    <input type="radio" name="Dislike[]" value="Dogs"/>
    <input type="radio" name="Hate[]" value="Dogs"/>
    <label>Ferrets</label>
    <input type="radio" name="Love[]" value="Ferrets"/>
    <input type="radio" name="Like[]" value="Ferrets"/>
    <input type="radio" name="Dislike[]" value="Ferrets"/>
    <input type="radio" name="Hate[]" value="Ferrets"/>
    <label>Turtles</label>
    <input type="radio" name="Love[]" value="Turtles"/>
    <input type="radio" name="Like[]" value="Turtle"/>
    <input type="radio" name="Dislike[]" value="Turtles"/>
    <input type="radio" name="Hate[]" value="Turtles"/>
<form>

这背后的逻辑是什么?目的是什么?你只能选择一个单选按钮,这就是单选按钮的特点。为什么要使用数组?一个简单的 <?php $radioValue = $_POST['radioName'] ?> 就可以解决问题了。 - elclanrs
这不是问题的答案,而是一种排列脚本,用户应该将问题排列在4个类别之一。可以将问题视为对象,可以放置在4个盒子中的其中一个;因此,期望的输出是每个盒子包含的内容。 - ZoeStellan
你能举个可能的问题和答案的例子吗?我还是不明白。难道你不能只使用复选框吗? - elclanrs
编辑了帖子并添加了更多细节。 - ZoeStellan
1
那根本就没有意义! - elclanrs
我同意@elclanrs的观点,这很荒谬。你试图通过错误的方式来解决自己制造的问题。 - MetalFrog
4个回答

2

我觉得你可以猜到,名称将复选框分组,所以不使用javascript无法实现你想要的方式。我建议你按问题命名复选框,然后可以使用php根据值对它们进行分组。 例如,如果你获得答案1、3、1、2,你可以将它们push到适当的数组中。 大概是这样的。但这并不是绝对可靠的。

        <form method="post">
            <input type="radio" name="v1" id="v1-1" value="1"/><label for="v1-1">1-1</label><br/>
            <input type="radio" name="v1" id="v1-2" value="2"/><label for="v1-2">1-2</label><br/>
            <input type="radio" name="v1" id="v1-3" value="3"/><label for="v1-3">1-3</label><br/>

            <input type="radio" name="v2" id="v2-1" value="1"/><label for="v2-1">2-1</label><br/>
            <input type="radio" name="v2" id="v2-2" value="2"/><label for="v2-2">2-2</label><br/>
            <input type="radio" name="v2" id="v2-3" value="3"/><label for="v2-3">2-3</label><br/>

            <input type="radio" name="v3" id="v3-1" value="1"/><label for="v3-1">3-1</label><br/>
            <input type="radio" name="v3" id="v3-2" value="2"/><label for="v3-2">3-2</label><br/>
            <input type="radio" name="v3" id="v3-3" value="3"/><label for="v3-3">3-3</label><br/>

            <input type="radio" name="v4" id="v4-1" value="1"/><label for="v4-1">4-1</label><br/>
            <input type="radio" name="v4" id="v4-2" value="2"/><label for="v4-2">4-2</label><br/>
            <input type="radio" name="v4" id="v4-3" value="3"/><label for="v4-3">5-3</label><br/>
            <input type="submit" value="vote"/>
        </form>
<?php
if(! empty($_POST))
{
    $plausible_answers = array(1,2,3,4);
    $answers = array();
    for($i=1;! empty($_POST["v$i"]);++$i)
    {
        if(in_array($_POST["v$i"], $plausible_answers))
        {
            $answers[$_POST["v$i"]][] = $i;
        }
    }
    print_r($answers);
}
?>

是的,我也在考虑这个问题,但我想要一个更简单的解决方案(奥卡姆剃刀原则)。既然似乎没有绕过它的方法,我只能按照你说的去做。谢谢。 - ZoeStellan

2

每个名称只能选择一个单选按钮,因此如果您有不同的名称(正如您所拥有的那样),用户将能够在每个问题中选择多个单选按钮。很抱歉告诉您,您提出的方法行不通。相反,您将需要维护一个手动列表,以记录对应问题的答案编号。看起来您已经提前知道了所有答案,所以这应该不是什么大问题。


我知道我必须使用相同的名称才能使选项互斥。我的问题是如何实现所期望的结果,即使我必须采取不同的方法。 - ZoeStellan

1

我认为你需要从另一个方向来考虑,类似这样

<label>Cats</label>
<input type="radio" name="Cats" value="Love"/> Love
<input type="radio" name="Cats" value="Like"/> Like
<input type="radio" name="Cats" value="Dislike"/> Dislike 
<input type="radio" name="Cats" value="Hate"/> Hate

在服务器端,类似于以下内容:

$loves=array();
$likes=array();
$dislikes=array();
$hates=array();

然后遍历 $_POST,检查其值,如果与您期望的四个值之一匹配,则将名称推入相应的数组。


0

你可以像创建array[]一样创建数组,但在单选按钮中,我们必须为其指定索引,例如array[1]、array[2]...动态地。如果我们像其他input type="fname[]"一样给出名称radioArray[],它不会自动递增索引,我们必须使用额外的变量来递增索引。

  e.g name= "$radiArray[1] = 'val1'"; //give index like 1,2,3 ...
      name ="$radiArray[2] = 'val2'"; ....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接