如何使用php

时间:2018-06-28 11:14:36

标签: php php-5.3

我们有一种形式,可以动态添加输入。在表单提交页面中,我们将获得以下结果

print_r($_POST)

['wind_1']=hk
['wind_2']=pop
etc etc 

['wind_25']=another

所以这里我们需要获取最后一个键号,即 wind_n ,这里是 n = 25

  

最后一个输入是['wind_25'],这就是为什么n = 25

请帮助。

4 个答案:

答案 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_子字符串或整个字符串,然后选择最大值。

Demo


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的值,并因此显示答案。

相关问题