如何使用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_ 子字符串或整个字符串,然后提取最高值。

Demo


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']);