无法将多个字段的数据转换为一个数组

时间:2015-03-02 07:00:20

标签: php arrays

我的表格看起来像这样:

<form name="search" method="post" action="http://example.com/search3/">
Seach for: <input type="text" name="find[]" /> 
Search for stories by Type
<select name="find[]">
<option value="Fiction" selected>Fiction</option>
<option value="Non-Fiction">Non-Fiction</option>
<option value="Essay">Essay</option>
</select>
<input type="submit" name="search" value="Search" />
</form>

在php.search上,我通过以下方式获取数据:

$input = array(
"find" => $_POST['find'],
);

它几乎可以工作,除了它没有将结果放在find数组中。相反,数据将进入array2中的结果,可能是b / c我将每个字段命名为find []。这是var_dump:

array(1) {
["find"]=>
array(2) {
[0]=>
string(5) “testing1”
[1]=>
string(7) “testing2”
}
}

我不确定为什么在这种情况下我将查找数组留空。

如果我更改表单以便将find []名称作为数组变为find, 然后我得到数据进入名为find的数组,我想要,但是,只会捕获选择表单数据。请参阅var_dump了解结果以及我如何只得到一个结果而不是两个结果:

array(1) {

["find"]=>
string(7) “testing2”

}

问题是...... 如何获取输入并选择在find数组中捕获的数据?

3 个答案:

答案 0 :(得分:0)

使用方括号[]命名字段时,PHP会自动在$_POST(或$_GET)数组中创建嵌套数组。

在你的情况下,$ input ['find']的值是一个有两个数字键的数组。

echo $input['find'][0];
echo $input['find'][1];

您可以假设索引0保存在文本输入中输入的值,索引1保存在列表中选择的值。

如果您跳过字段名称中的squre括号,浏览器会将它们发送到服务器,如下所示:

find=value1&find=value2

PHP在解析数据时,首先将value1存储在密钥find下,但是当另一个find密钥出现时,它会用新的value2覆盖先前的值

答案 1 :(得分:0)

试试这个,这对你有帮助。

字段名称不应相同。

<form name="search" method="post">
  Seach for: <input type="text" name="search" /> 
  Search for stories by Type
  <select name="find[]" multiple>
    <option value="Fiction" selected>Fiction</option>
    <option value="Non-Fiction">Non-Fiction</option>
    <option value="Essay">Essay</option>
  </select>
  <input type="submit" name="submit" value="Search" />
</form>

<?php 
if(isset($_POST['submit'])){
  $input=array("find"=>$_POST['search'],'search'=>$_POST['find']);
  print_r($input);
}

?>

答案 2 :(得分:0)

<form name="search" method="post" action="">
Seach for: 
Search for stories by Type
<select name="find[]">
<option value="Fiction" selected>Fiction</option>
<option value="Non-Fiction">Non-Fiction</option>
<option value="Essay">Essay</option>
</select>
<input type="text" name="find[]" /> 
<input type="submit" name="search" value="Search" />
</form>
<?php if(isset($_POST)){
    $input = array();
    $var =array();

     foreach ($_POST['find'] as $key => $value) {
        if(!empty($value)) {
            array_push($var, $value);
        }
        else{
            continue;
        }
     }
     $input = array(
"find" => $var,
);
     print_r($input);
}