如何在PHP中发布关联数组

use*_*475 11 html php associative-array

我有以下表格:

<form action="options.php" method="post">
    <input type="text" name="deptid" id="deptid" />
    <input type="text" name="deptname" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>
Run Code Online (Sandbox Code Playgroud)

编辑

是否可以提交之前将这两个值传递给一个关联数组?我想以这种形式传递它:

array('deptid'=>'deptname')
Run Code Online (Sandbox Code Playgroud)

我需要这个,因为我避免修改目标php文件的脚本(options.php)

谢谢.

Jar*_*ish 23

这是一个使用纯HTML的方法,几乎可以让你完全按照自己的意愿,只使用HTML:

<form action="options.php" method="post">
    <input type="text" name="options[deptid]" id="deptid" />
    <input type="text" name="options[deptname]" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>
Run Code Online (Sandbox Code Playgroud)

哪个会给你PHP:

$post_options = array(
    'options' => array(
        'deptid '=> '[that input element value]',
        'deptname' => '[that input element value]'
    )
);
Run Code Online (Sandbox Code Playgroud)

您可以随后(包括清理)访问,例如:

$post_options = array('options');

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
    // Do whatever 
}

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
    // Do whatever 
}
Run Code Online (Sandbox Code Playgroud)

编辑

或者......你要引用deptidinput name属性,并用它来修改行一个部门的名字吗?这似乎表明这样的事情:

<?php

$deptid = 1;
$deptname = 'Department of Silly Walks';

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">
Run Code Online (Sandbox Code Playgroud)

哪个输出:

<input type="hidden" name="options[1]" value="Department of Silly Walks">
Run Code Online (Sandbox Code Playgroud)

http://codepad.org/DtgoZGe7

这个问题是该$deptid值变为一个实际上没有直接命名或引用的值.我认为这可能有问题,因为从服务器到客户端和后面的值的抽象,所以我建议我在顶部而不是.这在实践中并没有多大区别,但它或多或少都是自我记录的.

注意,如果你想序列化一个部门列表,那就有点棘手了.例如,您可以尝试这样做:

<input type="text" name="options[][deptid]" id="deptid" />
<input type="text" name="options[][deptname]" id="deptname" />
Run Code Online (Sandbox Code Playgroud)

这会为每个人添加一个索引值input.然而......他们不是直接关联的.因此,您将获得每个键的两个零索引数组.

在这种情况下我建议使用Javascript来添加每个新部门的input元素,这样你就可以为每个部门提供如下数字:

<input type="text" name="options[0][deptid]" id="deptid" />
<input type="text" name="options[0][deptname]" id="deptname" />
<br/>
<input type="text" name="options[1][deptid]" id="deptid" />
<input type="text" name="options[1][deptname]" id="deptname" />
<br/>
<input type="text" name="options[2][deptid]" id="deptid" />
<input type="text" name="options[2][deptname]" id="deptname" />
<br/>
<input type="text" name="options[3][deptid]" id="deptid" />
<input type="text" name="options[3][deptname]" id="deptname" />
Run Code Online (Sandbox Code Playgroud)

或者使用旧式的POSTBACK方法并使用PHP来计算$POST['options']并"手动"添加具有相同索引的新"输入"行.这是一个常见的陷阱,所以如果这是你在某些时候所追求的,你只需要考虑它.


Mp *_*ega 6

$_POST已经是一个关联数组,我建议你不要把事情复杂化,因为$_POST已经保存了来自表单的数据.

$myassoc = $_POST;
print_r($myassoc);
Run Code Online (Sandbox Code Playgroud)

您将收到的关联数组在表单中的输入元素的name属性中组织并命名为相同(包括textarea)

其他见解

当我看到你的代码时,你想要将deptname数据放到deptidPHP服务器端代码中.你可以做的事情就是把它分配给钥匙deptid

$_POST['deptid'] = $_POST['deptname'];
$myassoc = $_POST;
print_r($myassoc);
Run Code Online (Sandbox Code Playgroud)