Php 如何存储具有多个输入的动态添加行中的数据

Php 如何存储具有多个输入的动态添加行中的数据,php,html,arrays,forms,input,Php,Html,Arrays,Forms,Input,我创建了一个包含用户(医生)信息的表单。除了默认信息外,他们现在还想增加办公室的办公时间 在当前表单中,我添加了一个包含3个输入元素的表单组: 选择name=“dayofweek[]” 输入名称=“时间块[]” 选择name=“type[]” 有一个按钮,用户可以添加一个具有相同字段的额外行,以便创建多个开放时间(每天/时间段)。 所有内容都通过表单中的“提交”按钮存储 保存数据后,如下所示: class Appointment { public $dayofweek; pu

我创建了一个包含用户(医生)信息的表单。除了默认信息外,他们现在还想增加办公室的办公时间

在当前表单中,我添加了一个包含3个输入元素的表单组:

  • 选择name=“dayofweek[]”
  • 输入名称=“时间块[]”
  • 选择name=“type[]”
有一个按钮,用户可以添加一个具有相同字段的额外行,以便创建多个开放时间(每天/时间段)。 所有内容都通过表单中的“提交”按钮存储

保存数据后,如下所示:

class Appointment
{
    public $dayofweek;
    public $timeblock;
    public $type;

    public function __construct($record)
    {
        $this->dayofweek = $record['dayofweek'];
        $this->timeblock = $record['timeblock'];
        $this->type = $record['type'];
    }
}

class AppointmentList
{
    public $appointmentArray = [];

    function setData($data)
    {
        $prepared = [];
        $i = 0;

        while ($i < count($data['dayofweek'])) {

            $a = $data['dayofweek'][$i];
            $b = $data['timeblock'][$i];
            $c = $data['type'][$i];

            $record = ['dayofweek' => $a, 'timeblock' => $b, 'type' => $c];
            $prepared[] = new Appointment($record);
            $i++;
        }
        $this->appointmentArray = $prepared;

    }

    function getData() {
        $data = ['dayofweek' => [],'timeblock' => [],'type' => []];
        foreach ($this->appointmentArray as $appointment){
            $data['dayofweek'][] = $appointment->dayofweek;
            $data['timeblock'][] = $appointment->timeblock;
            $data['type'][] = $appointment->type;
        }
        return $data;
    }
}
  • “dayofweek”=>[“周一”、“周一”、“周二”、…]
  • “时间块”=>[“10-12h”、“14-18h”、“10-16u”、…]
  • “键入”=>[“按预约”、“免费”、“免费”、…]
现在我想用字段[ID、DayOfWeek、TimeBlock、Type]将它们保存在我的表中。 为此,我必须重新排列从表单提交收到的数据,然后才能逐行保存它们。我现在就是这样做的:

public static function prepareData($dayofweek = [], $timeblock = [], $type = []) {

    $prepared = [];
    $i = 0;

    while($i < count($dayofweek)) {

        $a = $dayofweek[$i];
        $b = $timeblock[$i];
        $c = $type[$i];

        $record = ['dayofweek' => $a, 'timeblock' => $b, 'type' => $c];
        array_push($prepared, $record);

        $i++;
    }

    return $prepared;
}
公共静态函数prepareData($dayofweek=[],$timeblock=[],$type=[]){
$prepared=[];
$i=0;
而($i$a,'timeblock'=>$b,'type'=>$c];
数组推送($prepared$record);
$i++;
}
已准备好的美元;
}
要在编辑时显示表单上的数据,我必须做相反的操作。
我想知道是否还有其他更简单、更干净的方法可以做到这一点?

不幸的是,像array和string这样的原生数据类型只能有一种格式和结构。如果用例使用不同格式或不同数据结构的相同数据,建议创建数据对象。数据对象是将数据保存在其字段中的对象,它具有许多输入和输出方法,允许以不同的格式和结构使用数据

这是一种面向对象的方法,在这种情况下,它将使您的代码更加清晰易懂,并且在将来更易于扩展或修改。但请注意,这不会减少代码量。格式转换功能是必需的

根据描述,我们有一个名为Appointment的数据对象,数据为{DayOfWeek,TimeBlock,Type}。然而,所描述的输入和输出函数参考约会列表,因此,这些函数不属于约会对象。它们指的是另一个数据对象AppointmentList,其中包含约会数组以及输入和输出函数

此对象将如下所示:

class Appointment
{
    public $dayofweek;
    public $timeblock;
    public $type;

    public function __construct($record)
    {
        $this->dayofweek = $record['dayofweek'];
        $this->timeblock = $record['timeblock'];
        $this->type = $record['type'];
    }
}

class AppointmentList
{
    public $appointmentArray = [];

    function setData($data)
    {
        $prepared = [];
        $i = 0;

        while ($i < count($data['dayofweek'])) {

            $a = $data['dayofweek'][$i];
            $b = $data['timeblock'][$i];
            $c = $data['type'][$i];

            $record = ['dayofweek' => $a, 'timeblock' => $b, 'type' => $c];
            $prepared[] = new Appointment($record);
            $i++;
        }
        $this->appointmentArray = $prepared;

    }

    function getData() {
        $data = ['dayofweek' => [],'timeblock' => [],'type' => []];
        foreach ($this->appointmentArray as $appointment){
            $data['dayofweek'][] = $appointment->dayofweek;
            $data['timeblock'][] = $appointment->timeblock;
            $data['type'][] = $appointment->type;
        }
        return $data;
    }
}
您可以使用数组
$al->appointmentArray
逐个访问约会并将其存储在表中

之后,当您需要再次填写表单时,只需使用
$al->getData()

请注意,这只是一个示例。通常使用不同的技术将数据对象自动存储到表中


希望这有帮助。祝你好运。

我正在使用你建议的课程。所以我是用正确的方法做的。我也可以将其存储为json?谢谢你的全面回答!