Как POST ассоциативный массив в PHP

У меня есть следующая форма:

<form action="options.php" method="post"> <input type="text" name="deptid" id="deptid" /> <input type="text" name="deptname" id="deptname" /> <input type="submit" name="submit" id="submit" value="save" /> </form> 

РЕДАКТИРОВАТЬ

Можно ли передать два значения в один ассоциативный массив перед отправкой? Я хотел бы передать его в такой форме:

 array('deptid'=>'deptname') 

Мне нужно это, потому что я не могу изменить скрипт целевого файла php (options.php)

Благодарю.

Вот метод, использующий чистый HTML-код, который дает вам почти то, где вы хотите быть, и использует только HTML:

 <form action="options.php" method="post"> <input type="text" name="options[deptid]" id="deptid" /> <input type="text" name="options[deptname]" id="deptname" /> <input type="submit" name="submit" id="submit" value="save" /> </form> 

Что даст вам PHP:

 $post_options = array( 'options' => array( 'deptid '=> '[that input element value]', 'deptname' => '[that input element value]' ) ); 

Затем вы можете (в том числе и санировать ) доступ, например:

 $post_options = array('options'); if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) { // Do whatever } if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) { // Do whatever } 

РЕДАКТИРОВАТЬ

Или … Вы хотите ссылаться на deptid в deptid имени input name и использовать его для изменения строки для имени отдела? Кажется, что-то вроде этого:

 <?php $deptid = 1; $deptname = 'Department of Silly Walks'; ?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>"> 

Какие результаты:

 <input type="hidden" name="options[1]" value="Department of Silly Walks"> 

http://codepad.org/DtgoZGe7

Проблема заключается в том, что значение $deptid становится значением, которое на самом деле не имеет прямого имени или ссылки. Я думаю, что это потенциально проблематично реализовать из-за этой абстракции ценности от сервера к клиенту и обратно, поэтому я бы порекомендовал то, что у меня есть наверху. Это не большая разница на практике, но она более или менее самодокументирована.

Обратите внимание, что если вы хотите сериализовать список отделов, это немного сложнее. Например, вы можете попробовать:

 <input type="text" name="options[][deptid]" id="deptid" /> <input type="text" name="options[][deptname]" id="deptname" /> 

Что бы добавить индексированное значение для каждого input . Однако … Они не были бы напрямую связаны. Таким образом, вы получите вместо двух нулевых индексов массивы для каждого ключа.

В этом случае я бы предложил использовать Javascript для добавления каждого элемента input нового отдела, чтобы вы могли дать каждому номеру:

 <input type="text" name="options[0][deptid]" id="deptid" /> <input type="text" name="options[0][deptname]" id="deptname" /> <br/> <input type="text" name="options[1][deptid]" id="deptid" /> <input type="text" name="options[1][deptname]" id="deptname" /> <br/> <input type="text" name="options[2][deptid]" id="deptid" /> <input type="text" name="options[2][deptname]" id="deptname" /> <br/> <input type="text" name="options[3][deptid]" id="deptid" /> <input type="text" name="options[3][deptname]" id="deptname" /> 

Или используйте метод POSTBACK старой школы и используйте PHP для подсчета $POST['options'] и «вручную» добавьте новую «строку» входов с тем же индексом. Это обычная ловушка, поэтому вам просто нужно подумать об этом, если это то, что вы в какой-то момент.

$_POST уже является ассоциативным массивом, и я рекомендую вам не усложнять ситуацию, потому что $_POST уже содержит данные, полученные из вашей формы .

 $myassoc = $_POST; print_r($myassoc); 

и ассоциативный массив, который вы получите, организован и назван так же в атрибуте имени входных элементов в вашей форме (включая textarea)

Другие материалы

Поскольку я вижу ваш код, вы хотите deptname данные deptid когда он достигает кода на стороне сервера PHP. хорошо, что вы можете сделать, это просто назначить его ключевому deptid

 $_POST['deptid'] = $_POST['deptname']; $myassoc = $_POST; print_r($myassoc); 
 <form method="post"> <input type="text" name="formdata['deptid']" /> <input type="text" name="formdata['deptname']" /> <input type="submit" /> </form> <?php if(isset($_POST['formdata'])) { $deptid = $_POST['formdata']['deptid']; $deptname = $_POST['formdata']['deptname']; } ?> 

$_POST уже является ассоциативным массивом.

Вы можете перестроить массив формы, который вам нужен, просто $_POST переменной $_POST переменной

 $myarray = $_POST; 

Теперь $ myarray – это то, что вам нужно. Сделайте var_dump($myvar); ,

Создайте объект JS с соответствующей структурой, преобразуйте его в JSON с помощью JSON.stringify() , POST, а затем выполните json_decode($_POST['data'],true) .

У вас будет точная копия из объекта JS, в связанный с ним массив PHP. Отбросьте второй параметр true чтобы получить объект PHP.

Почему вы хотите это сделать? Но вы можете отправлять «массивы» через такие формы:

 <form method="post"> <input type="text" name="textboxes[]" /> <input type="text" name="textboxes[]" /> <input type="submit" /> </form> <?php if(isset($_POST['textboxes'])) var_dump($_POST['textboxes']); ?> 
 $deptid = $_POST['deptid']; $array = array($$deptid => $_POST['deptname']); print_r($array);