我们有一种形式,可以动态添加输入。在表单提交页面中,我们将获得以下结果
print_r($_POST)
['wind_1']=hk
['wind_2']=pop
etc etc
['wind_25']=another
所以这里我们需要获取最后一个键号,即 wind_n ,这里是 n = 25
最后一个输入是['wind_25'],这就是为什么n = 25
请帮助。
答案 0 :(得分:3)
除非您需要执行全字符串验证,否则在这里似乎不需要使用正则表达式。
似乎您只在检查静态前导字符,因此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())以访问数组的最后一个键。 (我假设键的结构/排序可靠。)
代码:(Demo)
$_POST = [
'wind_1' => 'hk',
'wind_2' => 'pop',
'wind_25' => 'another'
];
echo substr(array_key_last($_POST), 5);
// output: 25
在完成所有上述变通方法之后,我认为最好的建议是更改编码表单字段的方式。如果将name
属性从wind_#
更改为wind[#]
,则将在wind
中创建一个$_POST
子数组,然后可以访问数字值而无需剖析串。 (Demo)
echo array_key_last($_POST['wind']);
或(低于PHP7.3)
end($_POST['wind']);
echo key($_POST['wind']);
答案 1 :(得分:1)
$i=0;
foreach($_POST as $key => $value) {
if(strpos($key,"wind_") == 0) $i++;
}
echo $i;
答案 2 :(得分:1)
因此,如果wind
与$_POST
项的键匹配,则返回真,然后进一步计数并确认它会为您提供最后的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;
答案 3 :(得分:0)
$i=0;
foreach($_POST as $key=>$value)
{ if(preg_match('/^wind/',$key))
{ $i=$i+1; } }
echo $i;
此处foreach
语句使用$_POST
和$key
访问$value
中的所有键值对。 preg_match()
检查所有以风开头的键,对于每个这样的键,变量$i
都会递增。在检查完所有键之后,echo $i
将打印$i
的值,并因此显示答案。