我希望在单个字段(json)中的表格上存储任意数量的问题答案。
因此,输入内容可能类似于:
您的工作:
我知道我可以调用输入<input name="job_title[]">
,这些都将作为数组列在job_title
下。但是无论如何,仅通过以特定方式命名输入即可在键控数组下列出所有三个输入,例如:
[jobs => [['job_title' => 'xyz', 'start_date` => 'xyz', 'send_date` => 'xyz'], ....]
还是我需要在带有循环的php中手动构建它?
答案 0 :(得分:0)
如果只需要一个子集组,则可以在输入列表中指定要使用的键
<input name="name" value="John Doe">
<input name="jobs[job_title]" value="xyz">
<input name="jobs[start_date]" value="xyz">
<input name="jobs[send_date]" value="xyz">
结果:
$_POST => [
'name' => 'John Doe'
'jobs' ['job_title' => 'xyz', 'start_date' => 'xyz', 'send_date' => 'xyz'],
//...
];
如果您要接受一项以上的工作,则取决于您希望如何关联数据,建议使用显式定义的分组索引。
要按顺序关联值,类似于从数据库结果集中接收值的方式,可以对数据集组使用简单的增量变量。
<?php $i = 0; ?>
<input name="jobs[<?php echo $i; ?>][job_title]" value="xyz">
<input name="jobs[<?php echo $i; ?>][start_date]" value="xyz">
<input name="jobs[<?php echo $i; ?>][send_date]" value="xyz">
<?php $i++; ?>
<input name="jobs[<?php echo $i; ?>][job_title]" value="xyz">
<input name="jobs[<?php echo $i; ?>][start_date]" value="xyz">
<input name="jobs[<?php echo $i; ?>][send_date]" value="xyz">
<?php $i++; ?>
...
结果:$_POST['jobs'][$group][$field]
$_POST => [
'jobs' => [
0 => ['job_title' => 'xyz', 'start_date' => 'xyz', 'send_date' => 'xyz'],
1 => ['job_title' => 'xyz', 'start_date' => 'xyz', 'send_date' => 'xyz'],
//...
],
];
不包括输入分组值
$i
, 像name="jobs[][field]"
将导致PHP自动递增$_POST
个作业的数组索引。这相当于使用
$jobs[] = ['field' => 'value']
$_POST => [ 'jobs' => [ 0 => ['job_title' => 'xyz', ], 1 => ['start_date' => 'xyz'], 2 => ['send_date' => 'xyz'] ] ];
或者,您可以在遍历结果时使用数据库标识符列值,这在对现有记录进行更新时很有用。
<?php
$results = [
['id' => 1, 'job_title' => 'abc', 'start_date' => 'abc', 'send_date' => 'abc'],
['id' => 2, 'job_title' => 'xyz', 'start_date' => 'xyz', 'send_date' => 'xyz'],
];
foreach ($results as $row) { ?>
<input name="jobs[<?php echo $row['id']; ?>][job_title]" value="<?php echo $row['job_title']; ?>">
<input name="jobs[<?php echo $row['id']; ?>][start_date]" value="<?php echo $row['start_date']; ?>">
<input name="jobs[<?php echo $row['id']; ?>][send_date]" value="<?php echo $row['send_date']; ?>">
<?php } ?>
答案 1 :(得分:-1)
是否要基于“发布”输入值创建数组?只需将foreach循环与$_POST
变量一起使用
<?php
if (isset($_POST)) {
foreach ($_POST as $key => $value) { // for every post value
$array[] = array( // we create a array based on the name and the value
$key => $value
);
}
var_dump($array); // dump the array
}
?>
<form method="POST">
<input type="text" name="job title" value="xyz">
<input type="text" name="start date" value="xyz">
<input type="text" name="send date" value="xyz">
<!-- any other input -->
<button type="submit">sd</button>
</form>
var_dump($array)
会给您
array(2) { ["job_title"]=> string(3) "xyz" ["start_date"]=> string(3) "xyz" } array(1) { ["send_date"]=> string(3) "xyz" }
要从数组创建JSON,只需
echo json_encode($array)
答案 2 :(得分:-2)
像这样<input name="jobs[]['job_title']">
进行输入,它将根据需要提供数组。