如何使用php获取提交表单中的key部分
How to get the part of key in the submitted form using php
我们有一个动态添加输入的表单。在表单提交页面我们会得到如下结果
print_r($_POST)
['wind_1']=hk
['wind_2']=pop
etc etc
['wind_25']=another
所以这里我们需要得到最后一个key号,也就是wind_n,这里n=25
here the last input is ['wind_25'] that's why n=25
请帮忙。
$i=0;
foreach($_POST as $key=>$value)
{ if(preg_match('/^wind/',$key))
{ $i=$i+1; } }
echo $i;
此处 foreach
语句使用 $key
和 $value
访问 $_POST
中的所有键值对。 preg_match()
检查所有以 wind 开头的键,对于每个这样的键,变量 $i
会自增。检查完所有键后,echo $i
打印 $i
的值以及答案。
$i=0;
foreach($_POST as $key => $value) {
if(strpos($key,"wind_") == 0) $i++;
}
echo $i;
所以将 wind
与 $_POST
项的键匹配,如果 returns 为真,则进一步计算,瞧,它会给你最后一个 wind_n
索引。
而且这段代码会给你带来在数组中有一些其他 POST 变量的优势。
<?php
$_POST = array('wind_1' => 'r','wind_2' => 'r','wind_3' => 'r','wind_4' => 'r');
$i = 0;
foreach($_POST as $name => $var){
if(strpos("wind_",$name) === 0)
{
$i++;
}
}
echo $i;
这里似乎没有必要使用正则表达式,除非您需要执行全字符串验证。
看来你只检查静态前导字符,所以strpos()
是最有效的调用。
我正在保存每个找到的密钥,而不是使用计数器。
循环结束后,我从最后一个键中提取整数。
代码:(Demo)
$_POST = [
'wind_1' => 'hk',
'hamburger_66' => 'foo',
'wind_2' => 'pop',
'wind_25' => 'another'
];
foreach ($_POST as $k => $v) {
if (strpos($k, 'wind_') === 0) { // simple validatation
$key = $k; // overwrite previous qualifying key
}
}
echo filter_var($key, FILTER_SANITIZE_NUMBER_INT); // isolate the number
// or you could use str_replace('wind_', '', $key);
或者如果你想变得有点时髦......
echo max(preg_replace('~^(?:wind_|.*)~', '', array_keys($_POST)));
这将替换所有前导 wind_
子字符串或整个字符串,然后提取最高值。
P.S。当你是任何其他人提升到 PHP7.3 或更高时,会发布一个很棒的函数 (array_key_last()) 来访问数组的最后一个键。 (我假设密钥可靠 structured/sorted。)
代码:(Demo)
$_POST = [
'wind_1' => 'hk',
'wind_2' => 'pop',
'wind_25' => 'another'
];
echo substr(array_key_last($_POST), 5);
// output: 25
在采取了上述所有解决方法之后,我认为最好的建议是更改您对表单域进行编码的方式。如果将 name
属性从 wind_#
更改为 wind[#]
,您将在 $_POST
中创建一个 wind
子数组,然后您可以访问数值而无需剖析细绳。 (Demo)
echo array_key_last($_POST['wind']);
或(子PHP7.3)
end($_POST['wind']);
echo key($_POST['wind']);
我们有一个动态添加输入的表单。在表单提交页面我们会得到如下结果
print_r($_POST)
['wind_1']=hk
['wind_2']=pop
etc etc
['wind_25']=another
所以这里我们需要得到最后一个key号,也就是wind_n,这里n=25
here the last input is ['wind_25'] that's why n=25
请帮忙。
$i=0;
foreach($_POST as $key=>$value)
{ if(preg_match('/^wind/',$key))
{ $i=$i+1; } }
echo $i;
此处 foreach
语句使用 $key
和 $value
访问 $_POST
中的所有键值对。 preg_match()
检查所有以 wind 开头的键,对于每个这样的键,变量 $i
会自增。检查完所有键后,echo $i
打印 $i
的值以及答案。
$i=0;
foreach($_POST as $key => $value) {
if(strpos($key,"wind_") == 0) $i++;
}
echo $i;
所以将 wind
与 $_POST
项的键匹配,如果 returns 为真,则进一步计算,瞧,它会给你最后一个 wind_n
索引。
而且这段代码会给你带来在数组中有一些其他 POST 变量的优势。
<?php
$_POST = array('wind_1' => 'r','wind_2' => 'r','wind_3' => 'r','wind_4' => 'r');
$i = 0;
foreach($_POST as $name => $var){
if(strpos("wind_",$name) === 0)
{
$i++;
}
}
echo $i;
这里似乎没有必要使用正则表达式,除非您需要执行全字符串验证。
看来你只检查静态前导字符,所以strpos()
是最有效的调用。
我正在保存每个找到的密钥,而不是使用计数器。
循环结束后,我从最后一个键中提取整数。
代码:(Demo)
$_POST = [
'wind_1' => 'hk',
'hamburger_66' => 'foo',
'wind_2' => 'pop',
'wind_25' => 'another'
];
foreach ($_POST as $k => $v) {
if (strpos($k, 'wind_') === 0) { // simple validatation
$key = $k; // overwrite previous qualifying key
}
}
echo filter_var($key, FILTER_SANITIZE_NUMBER_INT); // isolate the number
// or you could use str_replace('wind_', '', $key);
或者如果你想变得有点时髦......
echo max(preg_replace('~^(?:wind_|.*)~', '', array_keys($_POST)));
这将替换所有前导 wind_
子字符串或整个字符串,然后提取最高值。
P.S。当你是任何其他人提升到 PHP7.3 或更高时,会发布一个很棒的函数 (array_key_last()) 来访问数组的最后一个键。 (我假设密钥可靠 structured/sorted。)
代码:(Demo)
$_POST = [
'wind_1' => 'hk',
'wind_2' => 'pop',
'wind_25' => 'another'
];
echo substr(array_key_last($_POST), 5);
// output: 25
在采取了上述所有解决方法之后,我认为最好的建议是更改您对表单域进行编码的方式。如果将 name
属性从 wind_#
更改为 wind[#]
,您将在 $_POST
中创建一个 wind
子数组,然后您可以访问数值而无需剖析细绳。 (Demo)
echo array_key_last($_POST['wind']);
或(子PHP7.3)
end($_POST['wind']);
echo key($_POST['wind']);