仅处理以特定字符串开头的$ _POST元素

时间:2011-12-10 21:44:12

标签: php html arrays forms post

我正在处理一个通过$ _POST接收大量元素的表单。其中一定数量(手动写出的数字太大)遵循以下模式:

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

表单的设置方式,我不确定会发送多少这样的元素 - 它可能是一个,它可能是50.我怎样才能处理一些$ _POST元素基于他们的名字?

5 个答案:

答案 0 :(得分:3)

您应该创建一个多维数组。

您的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;
}

答案 1 :(得分:3)

$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;
}

答案 2 :(得分:1)

'foreach`遍历数组的所有元素。然后检查是否符合要求。

foreach($_POST as $key => $value)
    if(preg_match("/^city_\d+$/", $key))
        ...

答案 3 :(得分:1)

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

答案 4 :(得分:0)

你可以像数组一样遍历$ _POST。

foreach($_POST as $key=>$value) {
  //filter based on $key
}