从复选框形式制作数组

Posted

技术标签:

【中文标题】从复选框形式制作数组【英文标题】:Make array from checkbox form 【发布时间】:2011-05-29 20:18:48 【问题描述】:

我和我的朋友正在制作一个根据您的兴趣编辑新闻故事的网站。有没有简单的方法来获取复选框数据并从选定的复选框中创建一个数组?这是我们的表格

<form action="signup.php" method="POST">
    Name: <input type="text" name="name" /> <br />
    Username: <input type="text" name="username"> <br />
    Password: <input type="password" name="pwd" /> <br />
    Email: <input type="text" name="email" /> <br />

    <p>By filling out this we will be able to find news articles that will interest you</p>        <br />
    Politics<input type="checkbox" name="interest[]" value="Politics" /> <br />
    Entertainment<input type="checkbox" name="interest[]" value="Entertainment" /> <br />
    Tech <input type="checkbox" name="interest[]" value="Tech" /> <br />
    Health<input type="checkbox" name="interest[]" value="Health" /> <br />
    Living<input type="checkbox" name="interest[]" value="Living" /> <br />
    Travel <input type="checkbox" name="interest[]" value="Travel" /> <br />
    World<input type="checkbox" name="interest[]" value="World" /> <br />
    Leisure<input type="checkbox" name="interest[]" value="Leisure" /> <br />
    Finance<input type="checkbox" name="interest[]" value="Finance" /> <br />
    Celebrity Gossip<input type="checkbox" name="interest[]" value="Gossip" /> <br />
    Movies<input type="checkbox" name="interest[]" value="Movies" /> <br />
    Sports<input type="checkbox" name="interest[]" value="Sports" /> <br />

    <input type="submit" value="Submit">
</form>

我们如何使用这些数据创建一个 php 数组?

【问题讨论】:

政治、娱乐、科技等应该有旁边的复选框 【参考方案1】:

使用这个:

<input type="checkbox" name="mydata[checkbox1]"> Option 1 (politics etc)
<input type="checkbox" name="mydata[checkbox2]"> Option 2
<input type="checkbox" name="mydata[checkbox3]"> Option 3

然后将 $_POST["mydata"] 作为数组访问

【讨论】:

【参考方案2】:

html 标记:

<form method="get">
    <input type="checkbox" name="options[]" value="Politics"/> Politics<br/>
    <input type="checkbox" name="options[]" value="Movies"/> Movies<br/>
    <input type="checkbox" name="options[]" value="World "/> World<br/>
    <input type="submit" value="Go!" />
</form>

在php代码中:

$checked = $_GET['options'];
for($i=0; $i < count($checked); $i++)
    echo "Selected " . $checked[$i] . "<br/>";

【讨论】:

如果我们想在"options[]" 上做一个监听器,那么该怎么做呢?执行 optionsoptions[] 不起作用。【参考方案3】:

抱歉,在我写完之前发布:(

只是对已发布的建议进行了一些改进:

为表单使用标签:

<label for="check_politics">Politics</label>
<input type="checkbox" name="intrests[]" id="check_politics" value="Politics"/>

在我看来,使用标签来增强表单非常棒:) 如果您希望它们获得换行符,请将它们的显示设置为阻止。

并在服务器端使用 foreach 循环遍历它:

$intrests = $_POST['intrests'];
foreach($intrests as $intrest) 
    echo $intrest . " is my intrest";

【讨论】:

【参考方案4】:
//options[] makes it an array
<form method="get">
    <input type="checkbox" name="options[]" value="Politics"/> Politics<br/>
    <input type="checkbox" name="options[]" value="Movies"/> Movies<br/>
    <input type="checkbox" name="options[]" value="World "/> World<br/>
    <input type="submit" value="Go!" />
</form>

您可以通过$_GET['options']访问此数组

试试Print_r( $_GET['options']);查看其中的值。

【讨论】:

【参考方案5】:

我发现做到这一点的最好方法(至少对我来说)是将复选框值转换为一个数组,以使用 implode 和 explode 按我想要的方式操作它:

<form action="thispage.php" method="post">

    (the previous fields here)

    <input type="checkbox" name="interests[]" value="Politics
    <input type="checkbox" name="interests[]" value="Entertainment
    <input type="checkbox" name="interests[]" value="Tech
    <input type="checkbox" name="interests[]" value="Health
    <input type="checkbox" name="interests[]" value="Living
    <input type="checkbox" name="interests[]" value="Travel
    <input type="checkbox" name="interests[]" value="World
    etc...

    <input type="submit" value="Submit">
</form>

还有 php(必须在表单之前):

<?php
if (isset($_POST['interests'])) 
    $interests_str = implode(" ", $_POST['interests']);// converts $_POST interests into a string
    $interests_array = explode(" ", $interests_str);// converts the string to an array which you can easily manipulate


for ($i = 0; $i > count($interests_array); $i++) 
    echo $interests_array[$i];// display the result as a string

?>

此脚本的优点是您可以随时访问文档中的 $interests_array 作为公共数组。

【讨论】:

【参考方案6】:

嘿,我已经很容易以任何 php 形式创建复选框和单选按钮。唯一的问题是我正在使用 Codeigniter MVC 框架。

这是您可以插入到通用模型或任何帮助文件中的函数定义。

function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType,$valuesArray = array()) 
        $returnString = '';
        if(count($valuesArray)!=count($labelsArray))
            $valuesArray=$lebelsArray;
        if ($fieldType === 'checkbox') 
            for ($i=0;$i<count($labelsArray);$i++) 
                $returnString.='&nbsp&nbsp&nbsp<input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
                if(in_array($valuesArray[$i], $selectedOption))
                        $returnString.=' checked="checked" ';
                
                $returnString.=' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>';
            
        
        if ($fieldType === 'radio') 
            for ($i=0;$i<count($labelsArray);$i++) 
                $returnString.='&nbsp&nbsp<input type="radio" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
                if($valuesArray[$i]== $selectedOption)
                        $returnString.=' checked="checked" ';
                $returnString.=' /><label>'.$labelsArray[$i].'</label>';
            
        
        return $returnString;
    

而且,你必须在视图文件中调用这个函数,

<?php
echo $this->common_model->createOptions('userHobbies[]', $hobbyOptions, $userHobbies, 'checkbox'); ?> 

第一个参数是复选框字段或单选字段的名称,对于两种情况的所有选项,它总是相同的。 第二个是标签数组,第三个是选定的选项,它将在加载表单时将这些选项显示为选中。第四种是将字符串作为“复选框”或“收音机”的字段类型。第五个是 values 数组,如果存在,它将包含标签的值,其顺序与标签的顺序相同。如果它不存在,标签数组将被当作值数组。

【讨论】:

【参考方案7】:
<form action="hitungmakan.php" method="post"><center>
<table border="1"  cellpadding="3">
<tr><td colspan="5" align="center">Menu Makan dan Minum</td></tr>
<tr><td align="center">Makanan</td>  <tdalign="center">Minuman</td></tr>        
<tr>
<td><input name="makanan[]" type="checkbox" value="nasgor">nasi goreng $.7000<br>
<input name="makanan[]" type="checkbox" value="wuduk">wuduk $.6000<br>
<input name="makanan[]" type="checkbox" value="pecel">pecel $.9000</td>
<td><input name="minuman[]" type="checkbox" value="tehbotol">teh botol $.3000<br>
<input name="minuman[]" type="checkbox" value="campur">es campur $.7000<br>
<input name="minuman[]" type="checkbox" value="jeruk">es jeruk $.6000</td>
</tr>
<input type="submit" value="Total" name="total">
<input type="reset" value="Batal">

【讨论】:

请帮帮我,如何使用 foreach 和 if 进行排列 如果您遇到问题,您应该创建自己的问题并参考此问题。【参考方案8】:

以下是处理发送到页面的数组变量的一般例程,这些变量位于常规名称/值变量中。

示例 php:

<?php
/*
Summary: Output variables pushed to the page. Handle arrays that have been sent.
Remarks:  $_REQUEST handles posts or gets.
*/
echo '<pre>';
foreach($_REQUEST as $name => $value)
  if (is_array($value)) 
    echo "$name:<br />";

    // Assign array to something more mnemonic
    $items = $value; 
    foreach ($items as $item) 
      echo "  $item<br />";
    
   else 
    echo "$name: $value<br />";
  

echo '</pre>';
?>

示例标记:

<form method="post"
      enctype="application/x-www-form-urlencoded"
      action="forms-process.php">
  <label>Customer name: <input name="customerName" /></label>
  <fieldset>
    <legend> Pizza Toppings </legend>
    <label> <input type="checkbox" name="toppings[]" value="bacon" /> Bacon </label>
    <label> <input type="checkbox" name="toppings[]" value="cheese" /> Extra Cheese </label>
    <label> <input type="checkbox" name="toppings[]" value="onion" /> Onion </label>
  </fieldset>
  <label><button>Submit order</button></label>
</form>  

示例输出:

customerName: John
toppings:
  bacon
  cheese

【讨论】:

以上是关于从复选框形式制作数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 和 Ajax 从数据库数组中检查复选框

带有数组的反应形式的primeng复选框

如何使用复选框形式选择 PHP 多维数组项

使用jquery检查复选框时如何制作键值对数组?

Angular 4:如何将字符串数组分配给反应形式的复选框

试图制作形式有彩虹选项,但不会工作