27

我有一个表单,其中包含许多名称为 item1、item2、item13、item43 等的字段,每次这些字段都不同,因为它们是用 AJAX 填充在表单中的。

当用户提交时,我需要执行以下操作:

  foreach($_POST['itemX']['tagsX'] as $tag){
    inserttag($tag, X);
  }

其中 X = 1,2,13,43 等。如何迭代 $_POST 值并仅针对其名称以“item”开头后跟 X 标识符的值执行上述操作?

基于 Piontek 回答的解决方案:

发布的数据具有以下格式:

[item38] => Array([tags38] => Array([0] => aaa,[1] => bbb))
[item40] => Array([tags40] => Array([0] => ccc,[1] => ddd))
[item1] =>  Array([tags1] => Array([0] => eee,[1] => zzz))

这就是我解析和使用它的方式:

foreach($_POST as $key => $value){
    if (strstr($key, 'item')){
        $id = str_replace('item','',$key); 
        foreach($_POST['item'.$id]['tags'.$id] as $tag){
            inserttag($tag, $id);
        }   
    }
}
4

5 回答 5

37
foreach($_POST as $key => $value)
{
    if (strstr($key, 'item'))
    {
        $x = str_replace('item','',$key);
        inserttag($value, $x);
    }
}
于 2013-01-09T20:16:10.080 回答
5

$_POST你可以这样循环foreach

foreach ($_POST as $key => $value) { ... }

在循环中,您可以评估循环找到的每个键是否符合您的条件。像这样的东西:

foreach ($_POST as $key => $value){
   if (substr($key, 0, 4) == "item") {
      $identifier = substr($key, 4);
      if (isset($value['tag' . $identifier])) { inserttag('tag', $identifier); }
   }
}

我不是 100% 确定什么是真实的,什么只是你问题中的占位符。也许我把某些东西当作确凿的事实,但实际上并非如此。您可能需要更详细地解释您的愿望。;)

于 2013-01-09T20:17:06.617 回答
2

尝试:

foreach($_POST as $key=>$value){
    inserttag($key, $value);
}

$key将是元素的名称,$value也是值。

于 2013-01-09T20:11:50.837 回答
1

循环$_POST并查看密钥是否包含'item'.

foreach($_POST as $key=>$value){
    if(preg_match('/item(\d*)/', $key, $match) === 1){
        inserttag($value, $match[1]);
    }
}
于 2013-01-09T20:15:26.723 回答
0

如果您的项目编号是连续的,则可以使用 FOR 来实现此目的。将数字 ($i) 与索引上的项目名称连接起来,如下所示:

for ($i=0; $i <= $numbeOfItems; $i++) {
 inserttag($_POST['item' . $i]['tags' . $i]), $i;
}
于 2021-02-25T13:48:36.983 回答