可能看起来像是一个愚蠢的问题,但是我遇到了从多个POST变量创建数组的问题。它们来自jQuery表单,可以包含任意数量的变量。它可以是2个选项中的一个,名称或学校。
例如:$_POST['name1']
,$_POST['school2']
,$_POST['name3']
,$_POST['name4']
等。
有没有办法获得最大数量的变量并将每个变量放入一个数组?或者有更好的方法吗?
赞赏任何意见。
答案 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;
}
}