任意数量的POST变量到数组中

时间:2011-08-19 19:14:00

标签: php jquery

可能看起来像是一个愚蠢的问题,但是我遇到了从多个POST变量创建数组的问题。它们来自jQuery表单,可以包含任意数量的变量。它可以是2个选项中的一个,名称或学校。

例如:$_POST['name1']$_POST['school2']$_POST['name3']$_POST['name4']等。

有没有办法获得最大数量的变量并将每个变量放入一个数组?或者有更好的方法吗?

赞赏任何意见。

7 个答案:

答案 0 :(得分:6)

<input name="name[]" />
<input name="school[]" />
<input name="name[]" />
<input name="name[]" />

这是你的意思吗? PHP Form Arrays然后,参考明智,您现在有一个$_POST['name']$_POST['school']的数组

foreach ($_POST['name'] as $name)
{
  // each form element from the `name[]` inputs = $name
}
foreach ($_POST['school'] as $school)
{
  // each form element from the `school[]` inputs = $name
}

或者,如果您对它们进行编号,则可以在$ _POST变量上使用foreach:

foreach ($_POST as $key => $val)
{
  if (preg_match('/^name\d+$/',$key){
    // name variable
  } else if (preg_match('/^school\d+$/',$key){
    // school variable
  }
}

答案 1 :(得分:0)

您可以将name[1](或name[])设为变量名称,而不是name
在这种情况下,PHP您将获得数组$_POST['name']

答案 2 :(得分:0)

您可以使用以下内容:

foreach ($_POST as $key => $value) {
  // parse key names / etc
}

这将允许您浏览所有帖子参数。但要小心,存在潜在的安全隐患。你必须非常仔细地验证你的密钥/名称(你应该总是这样做)。

答案 3 :(得分:0)

尝试使用school[]name[]等输入字段名称提交表单。这些应该在$_POST

中正确转换为数组

答案 4 :(得分:0)

您可以通过调用$_POST来计算count($_POST)数组中的元素。

但是,有一种更好的方法可以通过jQuery传递变量:

jQuery.post('/your/url/here', {
    'name': ['Tom', 'Jerry', 'Garfield'], // passing array...
    'school': ['MIT', 'UCLA', 'Florida State University'] // ...and another one
}, function(data){
    // your callback here
});

并且您将能够计算数据的特定部分(在PHP中):

$number_of_names = count($_POST['name']); // $_POST is multidimensional array
$number_of_schools = count($_POST['school']);

或者你可以显示它们(仍然在PHP中):

echo 'names: ' . implode(', ',$_POST['name']) . PHP_EOL;
echo 'schools: ' . implode(', ',$_POST['school']) . PHP_EOL;

有帮助吗?

答案 5 :(得分:0)

我想我现在知道你的意思了;

$options = Array( "school" => Array(), "names" => Array());
$i = 0;
foreach($options as $key => $val){
    while( isset($_POST[$key.$i] ) && ++$i ){
        $options[$key] += $_POST[$key.$i];
    }
}

表单数组可能是更好的选择,除非它们阻碍其他一些基础功能

简单:

$myNames = Array();
for($i=0; $i<1000; $i++){
if( !isset($_POST["school$i"])): 
    break;
 $myNames += $_POST["school$i"]
}

答案 6 :(得分:0)

更改表单上的输入将是最好的,因为其他人都在推荐。如果由于某种原因这不可行,则必须手动创建一个数组:

$base_names = array('name' => array(), 'school' => array());
foreach ($_POST as $key => $value) {
    $key = preg_replace('/\d+$/', '', $key);
    if (isset($base_names[$key])) {
        $base_names[$key][] = $value;
    }
}