У меня есть два варианта выпадающего с таким же именем, как следующие.
<form action="" method="post">
<select name="freeoptions[]">
<option value="[7][4]">Black</option>
<option value="[7][5]">Blue</option>
<option value="[7][3]">Red</option>
</select><select name="freeoptions[]">
<option value="[9][11]">Small</option>
<option value="[9][15]">Large</option>
<option value="[9][13]">XL</option>
</select>
<input type="submit" name="submit" value="submit">
</form>
Теперь, когда я публикую форму, получая данные в массиве, как,
Array
(
[freeoptions] => Array
(
[0] => [7][4]
[1] => [9][11]
)
)
Но я хочу этот массив что-то вроде
Array
(
[freeoptions] => Array
(
[0] => Array
(
[id] => [7]
[value] => [4]
)
[1] => Array
(
[id] => [9]
[value] => [11]
)
)
)
Может кто-нибудь, пожалуйста, помогите мне, как это сделать.
Спасибо,
Все в атрибуте «value» отправляется в виде буквенной строки, независимо от его содержимого, поэтому вы не можете публиковать значение в виде массива из коробки.
Вы всегда можете иметь оба значения в одном и том же атрибуте значения и разделить его на серверную часть.
Пример в HTML:
<option value="7;4"></option>
Затем сделайте что-то вроде этого в своем бэкэнде:
$data = [];
// Loop all freeoptions params
foreach ($_POST['freeoptions'] as $opt) {
// Split the value on or separator: ;
$items = explode(';', $opt);
if (count($items) != 2) {
// We didn't get two values, let's ignore it and jump to the next iteration
continue;
}
// Create our new structure
$data[] = [
'id' => $items[0], // Before the ;
'value' => $items[1], // After the ;
];
}
$data
-array теперь должен содержать структуру данных, которую вы хотите.
Если вы хотите продолжать использовать $_POST
-Вместим вместо этого, просто перезаписать исходные данные после foreach:
$_POST['freeoptions'] = $data;
Вы хотите отобразить результат из базы данных или отобразить вручную?