Всем привет! Есть форма. Примерно такая: HTML: <label>Название</label> <input type="text" name="name"> <label>Описание</label> <input type="text" name="description"> <span>Добавить спецификацию</span> При нажатии на кнопку Добавить спецификацию добавляются динамические поля. Поля могут быть текстовыми, могут быть чекбоксами, радиокнопками, ну и тп. Проблема такая. Допустим человек добавил три спецификации: HTML: <div> <h3>Спецификация #1</h3> <label>Размер</label> <label><input type="checkbox" name="size[]" value="1">Маленький</label> <label><input type="checkbox" name="size[]" value="2">Средний</label> <label><input type="checkbox" name="size[]" value="3">Большой</label> <label>Тип</label> <label><input type="checkbox" name="type[]" value="1">Ручной</label> <label><input type="checkbox" name="type[]" value="2">Автоматический</label> ----------------- <h3>Спецификация #2</h3> <label>Размер</label> <label><input type="checkbox" name="size[]" value="1">Маленький</label> <label><input type="checkbox" name="size[]" value="2">Средний</label> <label><input type="checkbox" name="size[]" value="3">Большой</label> <label>Тип</label> <label><input type="checkbox" name="type[]" value="1">Ручной</label> <label><input type="checkbox" name="type[]" value="2">Автоматический</label> ----------------- <h3>Спецификация #3</h3> <label>Размер</label> <label><input type="checkbox" name="size[]" value="1">Маленький</label> <label><input type="checkbox" name="size[]" value="2">Средний</label> <label><input type="checkbox" name="size[]" value="3">Большой</label> <label>Тип</label> <label><input type="checkbox" name="type[]" value="1">Ручной</label> <label><input type="checkbox" name="type[]" value="2">Автоматический</label> </div> В первой он выбрал размер Маленький. Во второй, он размер не выбирал, а выбрал тип Ручной. В третьей вновь выбрал только размер. Допустим Средний. Теперь он совершает ошибку в названии или описании товара и валидатор кидает его обратно, возвращая введённые данные. Смотрим как же выглядит Input:ld(). И видим, что данные для динамических полей выглядят так: Код (Text): ["size"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } ["type"]=> array(1) { [0]=> string(1) "1" } То есть, если я пройдусь по этим данным в цикле, он мне вернёт только две спецификации. В одной будет указан Размер и Тип, а во второй только Размер. И это не будет соответствовать тому, что ввёл пользователь. Все динамические поля необязательны к заполнению. Есть какое-то красивое решение или придумывать велосипед придётся?
Что-то никто не отвечает) Отвечу сам тогда. Проблема в том, что если мы отправляем на сервер пустое текстовое поле, то оно всё равно отобразится в присланном массиве $_POST. А вот чекбоксы приходят только те, которые отмечены. И получается, что если ни один чекбокс не отмечен, то и во входящих данных мы его не увидим. Ещё одна проблема обнаружилась в том, что если человек выбрал несколько чекбоксов в разных спецификациях, то они все равно попадут в один массив. В общем жуткая путаница. Решение я нашел такое: Для каждой спецификации нужно создавать отдельный массив и явно задавать ему ключ. HTML: ----------------- <h3>Спецификация #2</h3> <label>Размер</label> <label><input type="checkbox" name="size[0][]" value="1">Маленький</label> <label><input type="checkbox" name="size[0][]" value="2">Средний</label> <label><input type="checkbox" name="size[0][]" value="3">Большой</label> <label>Тип</label> <label><input type="checkbox" name="type[0][]" value="1">Ручной</label> <label><input type="checkbox" name="type[0][]" value="2">Автоматический</label> ----------------- И тогда получается, что массив каждой спецификации будет находится в отдельном элементе присланного массива. Код (Text): ["size"]=> array(2) { [0]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } [1]=> array(1) { [0]=> string(1) "1" } } ["type"]=> array(1) { [1]=> array(1) { [0]=> string(1) "1" } } Нам остаётся получить все уникальные ключи присланного массива и пройтись по ним циклом. А можно и не искать все ключи, а просто найти самое большое значение ключа из присланного массива.