Tengo un formulario que registra los valores de cinco máquinas a través de un foreach.

Seguido de comprobar que la terminación tiene el nombre del campo de texto y asignarlo a la variable correspondiente según una comparación de patrones:

Para guardar el valor correctamente, elimino el _1 _2 _3 _4 _5 para cada clave

Esta es la función

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

Quiero recorrer cada valor sin asignar una variable de número de datos para cada colección de datos.

Llego a esta función:

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

¿Cómo funciona?

  1. Reviso todos los valores de $ _POST.

  2. Escaneo internamente cada máquina ($ máquina).

  3. Creo el patrón para verificar en función del valor del bucle.

  4. Si coincide, elimino el final del $ item (_1, _2, _3, etc.).

  5. Creo la variable (matriz) con la sintaxis $ {var. $ Machine} y asígnele el valor.

El problema:

Cuando paso por la entrada 50 de las máquinas, los 5 caminos se repiten para generar variables, por lo tanto en un var_dump 250 salen valores.

¿Qué deseo?

Me gustaría poder pasar por cada valor POST y para esto, se revisarán todas las máquinas y su valor se asignará al correcto (matriz generada con $ {var})

php
-2
Victor Alvarado 16 feb. 2018 a las 22:40

2 respuestas

La mejor respuesta

Podrías usar dos foreach

      foreach ($numbers  as $key => $value) {
        foreach ($letters as $keylet => $valuelet) {
          $data[$value] = $valuelet;
       }
      }
1
scaisEdge 16 feb. 2018 a las 19:46

Deberías recorrer cada iteración de la primera matriz

foreach($numbers as $number){
     foreach($letters as $letter){
        $data[$number] = $letter;
     }
}
1
devnull Ψ 16 feb. 2018 a las 19:45