【问题标题】:PHP Iterate through $_POST and use values by namePHP 遍历 $_POST 并按名称使用值
【发布时间】:2013-01-09 20:10:10
【问题描述】:

我有一个表单,其中包含多个名称为 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);
        }   
    }
}

【问题讨论】:

    标签: php arrays


    【解决方案1】:
    foreach($_POST as $key => $value)
    {
        if (strstr($key, 'item'))
        {
            $x = str_replace('item','',$key);
            inserttag($value, $x);
        }
    }
    

    【讨论】:

    • 出色的解决方案总是如此简单。我不会说我应该想到它,因为我没有,尽管我应该这样做。谢谢!
    【解决方案2】:

    您可以像这样循环使用$_POSTforeach

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

    【讨论】:

    • @popnoodles 错字。谢谢。 :)
    • 我接受 Piontek 的回答只是因为它是在你之前发布的,尽管它基本上是一样的。感谢您的帮助!
    【解决方案3】:

    试试:

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

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

    【讨论】:

      【解决方案4】:

      遍历$_POST,看看key是否包含'item'

      foreach($_POST as $key=>$value){
          if(preg_match('/item(\d*)/', $key, $match) === 1){
              inserttag($value, $match[1]);
          }
      }
      

      【讨论】:

      • 您是否不必遍历$value 寻找与tagsX 匹配的键,然后将这些值传递给inserttag
      • 我只是在想这个@Musa!
      • @Musa:再次阅读这个问题,是的,听起来我会的。我会把它作为对 OP 的挑战 ^^
      • 请检查我的问题,我已经用解决方案更新了它。感谢大家的时间和精力。
      【解决方案5】:

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

      for ($i=0; $i <= $numbeOfItems; $i++) {
       inserttag($_POST['item' . $i]['tags' . $i]), $i;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 2023-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多