Обработка групп элементов формы при ее отправке POST методом

150
27 сентября 2017, 11:39

имеется форма со случайным кол-ом групп элементов, в каждой группе 3 элемента:

<form enctype="multipart/form-data" id="handler_form" method="post" action="">
<input name="add[work][day]" type="text" maxlength="255" value="1" />
<input name="add[work][may]" type="text" maxlength="255" value="2" />
<input name="add[work][shmay]" type="text" maxlength="255" value="3" />
<input name="add[work][day]" type="text" maxlength="255" value="4" />
<input name="add[work][may]" type="text" maxlength="255" value="5" />
<input name="add[work][shmay]" type="text" maxlength="255" value="6" />
<input name="add[work][day]" type="text" maxlength="255" value="7" />
<input name="add[work][may]" type="text" maxlength="255" value="8" />
<input name="add[work][shmay]" type="text" maxlength="255" value="9" />
<input type="submit" value="add"/>
</form>

отправляя эти данные обработчику php можно ли получить массив вида

work[1] -> day -> 1, may -> 2, shmay -> 3
work[2] -> day -> 4, may -> 5, shmay -> 6
work[3] -> day -> 7, may -> 8, shmay -> 9

без использования метода add[work][1][day], add[work][1][may], add[work][1][shmay] и т.д. ?

Или остается использовать JS и автоматически проставлять номера массивов при добавлении очередной группы этих 3 элементов.

Answer 1

ДА

<?php ($i = 1,$j =1; $i<= 3,$<=9; $i++,$j++) {?>
  <input name="add[work][<?=$i?>][day]" type="text" maxlength="255" value="<?=$j?>" />
  <input name="add[work][<?=$i?>][may]" type="text" maxlength="255" value="<?=$j?>" />
  <input name="add[work][<?=$i?>][shmay]" type="text" maxlength="255" value="<?=$j?>" />
<?php }?>
Answer 2

вот удалось накидать очень грубый вариант

//
$_massive_day = $_POST['add']['day'];
$_massive_may = $_POST['add']['may'];
$_massive_shmay = $_POST['add']['shmay'];
$_good_massive = array();
//
$_i_massive = 0;
foreach ( $_massive_day as $_massive_day_value )
{
$_good_massive['classes'][$_i_massive]['day'] = $_massive_day_value;
$_i_massive++;
}
//
$_i_massive = 0;
foreach ( $_massive_may as $_massive_may_value )
{
$_good_massive['classes'][$_i_massive]['may'] = $_massive_may_value;
$_i_massive++;
}
//
$_i_massive = 0;
foreach ( $_massive_shmay as $_massive_shmay_value )
{
$_good_massive['classes'][$_i_massive]['shmay'] = $_massive_shmay_value;
$_i_massive++;
}
var_dump($_good_massive);

В итоге получаем то что нужно

array(1) {
  ["classes"]=>
  array(3) {
    [0]=>
    array(3) {
      ["day"]=>
      string(1) "1"
      ["may"]=>
      string(1) "2"
      ["shmay"]=>
      string(1) "3"
    }
    [1]=>
    array(3) {
      ["day"]=>
      string(1) "4"
      ["may"]=>
      string(1) "5"
      ["shmay"]=>
      string(1) "6"
    }
    [2]=>
    array(3) {
      ["day"]=>
      string(1) "7"
      ["may"]=>
      string(1) "8"
      ["shmay"]=>
      string(1) "9"
    }
  }
}

ура! и пойду теперь спать со спокойной душой)

---> а вот вариант уже менее объемный)

function groupform( $_data, $_name )
{
global $_data_array;
foreach ( $_data as $_data_key => $_data_value )
{
$_data_array["$_data_key"]["$_name"] = $_data_value;
}
}
//
groupform($_POST['add']['day'], 'day');
groupform($_POST['add']['may'], 'may');
groupform($_POST['add']['shmay'], 'shmay');
var_dump($_data_array);

результат ->

array(3) {
  [0]=>
  array(3) {
    ["day"]=>
    string(1) "1"
    ["may"]=>
    string(1) "2"
    ["shmay"]=>
    string(1) "3"
  }
  [1]=>
  array(3) {
    ["day"]=>
    string(1) "4"
    ["may"]=>
    string(1) "5"
    ["shmay"]=>
    string(1) "6"
  }
  [2]=>
  array(3) {
    ["day"]=>
    string(1) "7"
    ["may"]=>
    string(1) "8"
    ["shmay"]=>
    string(1) "9"
  }
}
READ ALSO
Объединение периодов

Объединение периодов

Очень сложно описать задачу, которую мне нужно решить, но я постараюсь

131
Ошибка компиляции LNK1104

Ошибка компиляции LNK1104

При сборке проекта в VS 2015 происходит Ошибка LNK1104 не удается открыть файл "MSCOREElib"

339
Явное приведение типов в C++

Явное приведение типов в C++

Пытаюсь получить в ответе переменную t2 не как тип int, а как floatТ

308