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