如何使用php获取提交表单中的密钥部分

we have a form in which input added dynamically . In form submit page we will get the following result

print_r($_POST)

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

['wind_25']=another

so here we need to get the last key number , that is wind_n , here n=25

here the last input is ['wind_25'] that's why n=25

Please help .

Using regex seems unnecessary here unless you need to perform fullstring validation.

It seems that you are only checking the static leading characters, so strpos() is the most efficient call.

I am saving each found key instead of using a counter.

When the loop finishes, I extract the integer from the last key.

Code: (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);

Or if you want to get a bit funky...

echo max(preg_replace('~^(?:wind_|.*)~', '', array_keys($_POST)));

This replaces all of the leading wind_ substrings OR the whole string, then plucks the highest value.

Demo


P.S. When you are anyone else ascends to PHP7.3 or higher, there is a wonderful function released (array_key_last())to access the last key of an array. (I'm assuming the keys are reliably structured/sorted.)

Code: (Demo)

$_POST = [
    'wind_1' => 'hk',
    'wind_2' => 'pop',
    'wind_25' => 'another'
];

echo substr(array_key_last($_POST), 5);
// output: 25

After all of the above workarounds, I think the best advice would be to change the way you are coding your form fields. If you change the name attribute from wind_# to wind[#], you will create a wind subarray within $_POST and then you can access the number values without dissecting a string. (Demo)

echo array_key_last($_POST['wind']);

or (sub PHP7.3)

end($_POST['wind']);
echo key($_POST['wind']);
 $i=0;
  foreach($_POST as $key=>$value)
  {  if(preg_match('/^wind/',$key))
    { $i=$i+1; }  }
 echo $i;

here the foreach statement accesses all the key-value pair in $_POST using $key and $value. preg_match() checks for all the keys that start with wind and for every such key the variable $i increments itself. after all the keys are checked, echo $i prints the value of $i and hence the answer.

$i=0;
foreach($_POST as $key => $value) {
   if(strpos($key,"wind_") == 0) $i++;
}
echo $i;

so matching wind with key of $_POST item if it returns true then take further the count and voila it will give you the very last wind_n index. and also this code will give you the advantage of having some other POST variable in array.

 <?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;