从输入创建数组?

时间:2019-05-24 14:28:06

标签: php

我希望在单个字段(json)中的表格上存储任意数量的问题答案。

因此,输入内容可能类似于:

您的工作:

  • 职称
  • 开始日期
  • 结束日期

我知道我可以调用输入<input name="job_title[]">,这些都将作为数组列在job_title下。但是无论如何,仅通过以特定方式命名输入即可在键控数组下列出所有三个输入,例如:

[jobs => [['job_title' => 'xyz', 'start_date` => 'xyz', 'send_date` => 'xyz'], ....]

还是我需要在带有循环的php中手动构建它?

3 个答案:

答案 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']">进行输入,它将根据需要提供数组。