Обрабатывать только элементы $ _POST, начинающиеся с определенной строки - PullRequest
2 голосов
/ 11 декабря 2011

Я обрабатываю форму, которая получит много элементов через $ _POST.Определенное число из них (слишком большое, чтобы выписать их вручную) следует шаблону:

$_POST['city_1']
$_POST['city_2']
$_POST['city_3']
$_POST['city_4']

и т. Д.

Как настроена форма, я не знаю, какмногие подобные элементы будут отправлены - это может быть один, это может быть 50. Как я могу обработать только несколько элементов $ _POST, основываясь на их именах?

Ответы [ 5 ]

3 голосов
/ 11 декабря 2011

Вместо этого вы должны создать многомерный массив.

Ваши поля формы HTML могут выглядеть следующим образом:

<input type="text" name="cities[city_1]">
<input type="text" name="cities[city_2]">
<input type="text" name="cities[city_3]">
<input type="text" name="cities[city_4]">

В своем PHP-коде вы можете затем просмотреть свои города, набрав $_POST['cities']:

foreach($_POST['cities'] as $city)
{
  echo $city;
}
3 голосов
/ 11 декабря 2011
$cities = preg_grep('/^city_\d+$/', array_keys($_POST));

foreach($cities as $city) {
    echo $_POST[$city];
}

Или

foreach($_POST as $name=>$value) {
    if (strpos($value, 'city_') !== 0) continue;

    echo $value;
}
1 голос
/ 11 декабря 2011
function startsWith($haystack, $needle)
{
  $length = strlen($needle);
  return (substr($haystack, 0, $length) === $needle);
}


foreach ($_POST as $k=>$v)
{
  if (startsWith($k, 'city_')
  {
    // Process parameter here ...
  }
}
1 голос
/ 11 декабря 2011

«foreach» перебирает все элементы массива.Затем проверьте соответствие требованиям.

foreach($_POST as $key => $value)
    if(preg_match("/^city_\d+$/", $key))
        ...
0 голосов
/ 11 декабря 2011

Вы можете перебирать $ _POST как массив.

foreach($_POST as $key=>$value) {
  //filter based on $key
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...