Как получить часть ключа в отправленной форме, используя php - PullRequest
0 голосов
/ 28 июня 2018

у нас есть форма, в которой ввод добавляется динамически. На странице отправки формы мы получим следующий результат

print_r($_POST)

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

['wind_25']=another

здесь нам нужно получить последний номер ключа, то есть wind_n , здесь n = 25

здесь последний вход [wind_25], поэтому n = 25

Пожалуйста, помогите.

Ответы [ 4 ]

0 голосов
/ 28 июня 2018

Использование регулярных выражений здесь не требуется, если только вам не нужно выполнять проверку полной строки.

Кажется, что вы проверяете только статические начальные символы, поэтому 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']);
0 голосов
/ 28 июня 2018
$i=0;
foreach($_POST as $key => $value) {
   if(strpos($key,"wind_") == 0) $i++;
}
echo $i;
0 голосов
/ 28 июня 2018

, так что wind соответствует ключу элемента $_POST, если он возвращает true, тогда продолжайте подсчет и вуаля, он даст вам самый последний индекс 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;
0 голосов
/ 28 июня 2018
 $i=0;
  foreach($_POST as $key=>$value)
  {  if(preg_match('/^wind/',$key))
    { $i=$i+1; }  }
 echo $i;

здесь оператор foreach обращается ко всем парам ключ-значение в $_POST, используя $key и $value. preg_match() проверяет все ключи, которые начинаются с wind, и для каждого такого ключа переменная $i увеличивается на единицу. после проверки всех ключей echo $i печатает значение $i и, следовательно, ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...