Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从数组中获取每个问题的id和答案?_Php - Fatal编程技术网

Php 如何从数组中获取每个问题的id和答案?

Php 如何从数组中获取每个问题的id和答案?,php,Php,如果用户正在会议中进行注册,并且正在注册id为“1”(Jake K)的注册类型中的1名参与者,以及id为“4”(John W)的注册类型中的1名参与者,则具有表单数据的请求具有以下3个数组: "name" => array:2 [▼ 1 => array:1 [▼ 1 => "Jake" ] 4 => array:1 [▼ 1 => "John" ] ] "surname" => array:2 [▼ 1 => arr

如果用户正在会议中进行注册,并且正在注册id为“1”(Jake K)的注册类型中的1名参与者,以及id为“4”(John W)的注册类型中的1名参与者,则具有表单数据的请求具有以下3个数组:

"name" => array:2 [▼
  1 => array:1 [▼
    1 => "Jake"
  ]
  4 => array:1 [▼
    1 => "John"
  ]
]
"surname" => array:2 [▼
  1 => array:1 [▼
    1 => "K"
  ]
  4 => array:1 [▼
    1 => "W"
  ]
]
"answer" => array:1 [▼
  1 => array:1 [▼   
    1 => array:2 [▼   // answers answered for the registration_type_id 1
      1 => "answer1"
      2 => "answer2"
    ]
  ]
]
需要使用此数组的信息插入
参与者
答案
表中。将其正确插入
参与者
表中,但对于
答案
表无效:

 foreach ($request->all()['name'] as $key => $nameArray) {
        foreach ($nameArray as $nameKey => $name) {
            // this is working
            $participant_result = Participant::create([
                'name'                 => $name,
                'surname'              => $request['surname'][$key][$nameKey],
                'registration_id' => $registration->id,
                'registration_type_id' => $key
            ]);


            // save answer to Database if exist
            // this is not working
            $answer = Answer::create([
                'question_id' => $request['answer'][$key], // the issue is here
                'participant_id' => $participant_result->id,
                'answer' => $request['answer'][$key][$nameKey], // and here
            ]);
        }
    }
该问题是因为需要在
答案
表的
问题id
答案
列中插入。但此值不能从带有“
$request['answer'][$key]
”和“
$request['answer'][$key][$nameKey]
”的数组中正确返回

您知道如何从数组中正确获取问题id和答案吗

在上面的这个数组示例中,“answer1”的问题id为1,“answer2”的id为2


表格:


参与者-1-概述
名称
姓
问题1
问题2
参加者-1人以上
名称
姓

首先:在循环中,您有多个名称,但答案有一个键(
1
)。在第二次运行时,您有
$key==4
,但在
$request['answer']
中没有这个。也许在第一个循环中你应该有两个循环?一个用于注册参与者,一个用于注册答案?如果两个答案都已注册,则使用
$participantResult
构建数组,并为每个答案注册
计数($participantResult)
answers:O如果未注册,则仅记住第一个注册参与者的ID并保存答案

请告诉我,
$request['answer']
是如何工作的?什么是
$request['answer'][1]
,什么是
$request['answer'][1][1]

其次,在本例中,
$request['answer'][$key][$nameKey]
是两个元素的数组。如果答案::create知道-没问题;)

编辑

这是正确的解决方案吗

<?php
$aPID = [];

foreach ($request->all()['name'] as $key => $nameArray) {
    foreach ($nameArray as $nameKey => $name) {
        $aPID[$key] = Participant::create([
            'name'                 => $name,
            'surname'              => $request['surname'][$key][$nameKey],
            'registration_id' => $registration->id,
            'registration_type_id' => $key
        ]);
    }
}

foreach($request['answer'] as $pid => $answersArray) {
    foreach($answersArray as $questionId => $answer) {
        $answer = Answer::create([
            'question_id' => $questionId,
            'participant_id' => $aPID[$pid],
            'answer' => $answer,
        ]);
    }
}

id为4的注册类型没有答案数组,因为没有与id为4的注册类型相关联的自定义问题,因此在注册表格中不会出现id为4的注册类型中注册的参与者的任何自定义问题,因此id为4的注册类型没有答案数组id 4.伙计,我知道$request['answer'][1]
的结果是什么,但不知道那是什么意思?第二个来自
$request['answer'][1][1]
?我认为第一个索引是对
['name'][1]
的引用,但是第二个呢?你能告诉我表单是如何构建的吗?我更新了这个问题,$request['answer'][1]是id为1的注册类型的应答器。我想如果你将表单制作成这样会更舒服:
name=“participant[1][name]”
name=“participant[1][answer 1]
…如果可能的话;)这样显示“数组到字符串的转换(SQL:insert into
answers
问题id
参与者id
答案
)值(1,{“姓名”:“杰克”,“姓氏”:“K”,“注册id”:207,“注册类型id”:1,“id”:83},回答1”)”。
<form method="post"
      action="https://proj.test/conference/1/conf-test/registration/storeRegistration">
    <h6> Participant - 1 - general</h6>

    <div class="form-group">
      <label for="namegeneral_1">Name</label>
      <input type="text" required  id="namegeneral_1" name="name[1][1]" class="form-control" value="">
    </div>

    <div class="form-group">
      <label for="surnamegeneral_1">Surname</label>
      <input type="text"  id="surnamegeneral_1" class="form-control" name=" surname[1][1]" value="">
    </div>

    <div class="form-group">
      <label for="participant_question">Question 1</label>
      <input type='text' name='answer[1][1][1]' class='form-control' required>
      <input type="hidden" name="question_required[1][1]" value="1">
    </div>

    <div class="form-group">
      <label for="participant_question">Question 2</label>
      <textarea name='answer[1][1][2]' class='form-control' rows='3' required></textarea>
      <input type="hidden" name="question_required[1][2]" value="1">
    </div>

    <h6> Participant - 1 - plus</h6>

    <div class="form-group">
      <label for="nameplus_1">Name</label>
      <input type="text" required  id="rnameplus_1" name="rname[4][1]" class="form-control" value="">
    </div>

    <div class="form-group">
      <label for="surnameplus_1">Surname</label>
      <input type="text"  id="rsurnameplus_1" class="form-control" name=" rsurname[4][1]" value="">
    </div>

    <input type="submit" class="btn btn-primary" value="Register"/>
</form>
<?php
$aPID = [];

foreach ($request->all()['name'] as $key => $nameArray) {
    foreach ($nameArray as $nameKey => $name) {
        $aPID[$key] = Participant::create([
            'name'                 => $name,
            'surname'              => $request['surname'][$key][$nameKey],
            'registration_id' => $registration->id,
            'registration_type_id' => $key
        ]);
    }
}

foreach($request['answer'] as $pid => $answersArray) {
    foreach($answersArray as $questionId => $answer) {
        $answer = Answer::create([
            'question_id' => $questionId,
            'participant_id' => $aPID[$pid],
            'answer' => $answer,
        ]);
    }
}