【问题标题】:moving a numbered amount of named items from one array into another将一定数量的命名项目从一个数组移动到另一个数组
【发布时间】:2023-03-14 13:30:01
【问题描述】:

我不完全确定逻辑将如何运作。我的大脑被炸了,我无法清晰地思考。

我正在处理一些 POST 数据,该数组中的一个字段是数量字符串。我可以读取此字符串并确定是否有超过 1 个小部件需要处理。

if($quantity <= 1){ //$_POST[widget1] }

现在说有 4 个小部件。数量字段会反映这个数字,但我将如何遍历它们并将它们分配给自己的新数组?

$_POST[widget1], $_POST[widget2], $_POST[widget3], $_POST[widget4]

我如何获取该数量编号,并使用某种通配符或前缀或其他东西从 post 数组中获取那么多和那些特定的命名项目?不知道这是for,还是while,又是什么操作。如何循环访问 $_POST['widget*X*'],其中 X 是我的数量?

最终结果是我希望有一个结构如下的数组:

$widgets[data1]
$widgets[data2]
$widgets[data3]
$widgets[data4]

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    使用for 循环,您可以通过变量访问$_POST 键,如$_POST["widget$i"]

    $widgets = array();
    for ($i=1; $i<=$quantity; $i++) {
      // Append onto an array
      $widgets[] = $_POST["widget$i"];
    }
    

    但是,更好的长期解决方案是更改 HTML 表单,使其首先通过将 [] 添加到表单输入的 name 属性来将数组传递回 PHP:

    <input type='text' name='widgets[]' id='widget1' value='widget1' />
    <input type='text' name='widgets[]' id='widget2' value='widget2' />
    <input type='text' name='widgets[]' id='widget3' value='widget3' />
    

    在 PHP 中通过$_POST['widgets'] 访问,已经是一个数组!

    var_dump($_POST['widgets']);
    

    【讨论】:

      【解决方案2】:

      迭代项目的数量,至少超过一个(如你所描述的那样):

      $widgets = array();
      foreach (range(1, max(1, $quantity)) as $item)
      {
          $name = sprintf('widget%d', $item);
          $data = sprintf('data%d', $item);
          $widget = $_POST[$name];
          // do whatever you need to do with that $widget.
          $widgets[$data] = $widget;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 2021-09-27
        • 1970-01-01
        相关资源
        最近更新 更多