Как правильно переупорядочить массив POST из HTML? - PullRequest
0 голосов
/ 18 мая 2019

Учитывая, что у меня есть такой массив:

array:3 [▼
  "description" => array:2 [▼
    0 => "serv1"
    1 => "serv2"
  ]
  "quantity" => array:2 [▼
    0 => "1"
    1 => "2"
  ]
  "cost" => array:2 [▼
    0 => "100"
    1 => "200"
  ]
]

Исходя из HTML-формы, которая выглядит следующим образом:

<div class="col-md-6">
    <div class="form-group">
        <input 
            type="text" 
            name="service[description][]" 
            class="form-control" 
        />
    </div>
</div>
<div class="col-md-3">
    <div class="form-group">
        <input 
            type="text" 
            name="service[quantity][]" 
            class="form-control"
        />
    </div>
</div>
<div class="col-md-3">
    <div class="form-group">
        <input 
            type="text" 
            name="service[cost][]" 
            class="form-control" 
        />
    </div>
</div>

Как я могу исправить массив таким образом, чтобырезультат примерно такой:

[
    ["description" => "serv1", "quantity" => "1", "cost" => "100"],
    ["description" => "serv2", "quantity" => "2", "cost" => "200"],
]

Ответы [ 2 ]

3 голосов
/ 18 мая 2019

Зациклить массивы первым подмассивом и использовать array_column.
Используйте array_combine и array_keys, чтобы получить правильные ключи.

foreach($_POST["description"] as $key => $val){
    $new[] = array_combine(array_keys($_POST),array_column($_POST, $key));
}
1 голос
/ 19 мая 2019

Если это вариант, перестройте разметку на:

<div class="col-md-6">
    <div class="form-group">
        <input 
            type="text" 
            name="service[0][description]" 
            class="form-control" 
        />
    </div>
</div>
<div class="col-md-3">
    <div class="form-group">
        <input 
            type="text" 
            name="service[0][quantity]" 
            class="form-control"
        />
    </div>
</div>
<div class="col-md-3">
    <div class="form-group">
        <input 
            type="text" 
            name="service[0][cost]" 
            class="form-control" 
        />
    </div>
</div>

Уведомление явное индекс в атрибуте name.

С этим именованием input s ваш массив POST уже будет структурирован так, как вам нужно, и перестройка на стороне сервера не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...