Использование регулярных выражений здесь не требуется, если только вам не нужно выполнять проверку полной строки.
Кажется, что вы проверяете только статические начальные символы, поэтому strpos()
является наиболее эффективным вызовом.
Я сохраняю каждый найденный ключ вместо счетчика.
Когда цикл заканчивается, я извлекаю целое число из последнего ключа.
Код: ( Демо )
$_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 () ) для доступа к последнему ключу массива. (Я предполагаю, что ключи надежно структурированы / отсортированы.)
Код: ( Демо )
$_POST = [
'wind_1' => 'hk',
'wind_2' => 'pop',
'wind_25' => 'another'
];
echo substr(array_key_last($_POST), 5);
// output: 25
После всех вышеперечисленных обходных путей, я думаю, лучший совет - изменить способ кодирования полей формы. Если вы измените атрибут name
с wind_#
на wind[#]
, вы создадите подрешетку wind
в пределах $_POST
, и затем вы сможете получить доступ к числовым значениям без разбора строки. ( Демо )
echo array_key_last($_POST['wind']);
или (sub PHP7.3)
end($_POST['wind']);
echo key($_POST['wind']);