Есть множественный select с группами:
<select name="place[]" multiple>
<optgroup label="Станции метро">
<option value="metro1">Cтанция 1</option>
<option value="metro2">Cтанция 2</option>
</optgroup>
<optgroup label="Районы">
<option value="district1">Район 1</option>
<option value="district1">Район 2</option>
</optgroup>
</select>
При передаче в обработчик, получаем подобный массив:
"place":["metro1","metro2","raion1"]
Вопрос: как, если, конечно, возможно, разбить передаваемые данные на вложенные массивы?
Чтобы получилось вроде:
"place":{"metro":["metro1", "metro2"],"district":["district1"]}
Если невозможно, то какие способы есть для разделения подобных данных (на ум приходят только префиксы для value)?
Если прям так сильно нужно, можно попробовать сделать так, не самый оптимальный вариант конечно:
В примере используется Jquery
HTML
<form action="test.php" method="GET">
<select name="place[]" id="placeID" multiple>
<optgroup data-name="metro" label="Станции метро">
<option value="metro1">Cтанция 1</option>
<option value="metro2">Cтанция 2</option>
</optgroup>
<optgroup data-name="district" label="Районы">
<option value="district1">Район 1</option>
<option value="district1">Район 2</option>
</optgroup>
</select>
<input type="hidden" name="select_array" id="select_array">
<input type="submit" value="Вывод">
</form>
Jquery
$('#placeID').change(function() {
var arr = {};
$('select :selected').each(function(){
$('optgroup ').each(function() {
arr[$(this).data('name')] = $(this).find('option:selected').map(function() {
return $(this).val();
}).get();
});
console.log( JSON.stringify(arr) ); //Вывод для понимания
$("#select_array").val( JSON.stringify(arr) );
});
php
<?php
print_r($_GET['select_array']);
print_r(json_decode( $_GET['select_array'] ,true)); //parse
?>
Результат:
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости