如何在PHP中每个foreach完成循环增加一个计数器?

时间:2018-02-16 19:40:45

标签: php

我有一个表单,通过foreach注册五台机器的值。

然后检查结尾是否具有文本字段的名称,并根据模式的比较将其分配给相应的变量:

要正确保存值,请删除每个键的_1 _2 _3 _4 _5

这是函数

function registerMachines(){
    foreach($_POST as $item => $value){
        if(preg_match('/_1/', $item)){
            $item = explode("_", $item);
            $item = $item[0];
            $data_1[$item] = $value;
        } elseif(preg_match('/_2/', $item)){
            $item = explode("_", $item);
            $item = $item[0];
            $data_2[$item] = $value;
        } elseif(preg_match('/_3/', $item)){
            $item = explode("_", $item);
            $item = $item[0];
            $data_3[$item] = $value;
        } elseif(preg_match('/_4/', $item)){
            $item = explode("_", $item);
            $item = $item[0];
            $data_4[$item] = $value;
        } elseif(preg_match('/_5/', $item)){
            $item = explode("_", $item);
            $item = $item[0];
            $data_5[$item] = $value;
        } else {
            $configData[$item] = $value;
        }
    }
}

我希望循环每个值而不为每个数据集分配data_number变量。

我接触到这个功能:

$machines = [1, 2, 3, 4, 5];
    foreach($_POST as $item => $value){
        foreach($machines as $machine) {
            $match = '/_'.$machine.'$/';
            if(preg_match($match, $item)){
                $item = explode("_", $item);
                $item = $item[0];
                ${"machineData_".$machine}[$item] = $value;
            } else {
                $configData[$item] = $value;
            }
        }
    }

它是如何运作的?

  1. 我浏览了$ _POST的所有值。

  2. 我在内部扫描每台机器($ machine)。

  3. 我根据循环的值创建要检查的模式。

  4. 如果匹配,我将消除$ item的结尾(_1,_2,_3等)。

  5. 我使用语法$ {var创建变量(数组)。 $ Machine}并为其指定值。

  6. 问题:

    当我浏览机器的50个输入时,会重复5个路径以生成变量,因此会出现var_dump 250个值。

    我想要什么?

    我希望能够查看每个POST值,为此,将检查所有计算机并将其值分配给正确的值(使用$ {var}生成的数组)

2 个答案:

答案 0 :(得分:1)

你应该遍历第一个数组的每个迭代

foreach($numbers as $number){
     foreach($letters as $letter){
        $data[$number] = $letter;
     }
}

答案 1 :(得分:1)

你可以使用两个foreach

      foreach ($numbers  as $key => $value) {
        foreach ($letters as $keylet => $valuelet) {
          $data[$value] = $valuelet;
       }
      }