如何将通过邮寄发送的数据转换为php代码? 我有3个选择字段。大人,小孩,婴儿。 我想在发布时根据房间数创建以下json结构。儿童和婴儿的数量按地区划分不正确。我该怎么办?
foreach ($this->input->post('adult') as $key => $value) {
$rooms[] = array(
'adult' => $_POST['adult'][$key],
'child' => array(
'child_total' => $_POST['child'][$key],
'child_date' => $_POST['child_date']
),
'baby' => array(
'baby_total' => $_POST['baby'][$key],
'baby_date' => null
)
);
}
我想要这个json ...
rooms: [
{
adult: 2,
child: [
child_total: 1
child_date: [
"2017-08-10"
],
],
baby: [
baby_total: 1
baby_date: [
"2017-07-01"
],
],
},
{
adult: 1,
child: [
child_total: 2
child_date: [
"2017-08-08",
"2017-08-09"
],
],
baby: [
baby_total: 2
baby_date: [
"2017-06-08",
"2017-05-09"
],
],
}
],
答案 0 :(得分:1)
要弄清楚使您成为json编码的字符串所需的数据结构,让我们首先定义要使用的对象。假设这类似于酒店预订系统,让我们对其进行映射:
旅馆有房间。它们由房间号标识。可以用$room[$room_number]
在代码中进行说明。使用房间号作为键,可以唯一地标识特定的房间。
每个房间可容纳人员:成人,儿童和婴儿。可以通过以下代码在代码中加以说明
$room[$room_number]['adults']
$room[$room_number]['children']
$room[$room_number]['babies']
这组婴儿可以显示为$baby[]
。我们真的不需要用索引号以外的唯一标识符来识别婴儿。我们只是对列表感兴趣。
因此,我们将['babies']
替换为['baby'][]
$room[$room_number]['adults']
$room[$room_number]['children']
$room[$room_number]['baby'][]
每个婴儿都有属性。我们只使用一个,但是为了举例说明,我们要记录两个:生日和名字。换句话说,每个$baby = array('birthday'=>$birthdate, 'name'=>$name);
这很难说明,因为在将其分配给$room[$room_number]['baby'][]
之前,您必须收集所有婴儿信息。所以我将使用索引号显示它:
$room[$room_number]['adults']
$room[$room_number]['children']
$room[$room_number]['baby'][0]['birthdate']
$room[$room_number]['baby'][0]['name']
孩子需要相同的功能:
$room[$room_number]['adults']
$room[$room_number]['children'][0]['birthdate']
$room[$room_number]['children'][0]['name']
$room[$room_number]['baby'][0]['birthdate']
$room[$room_number]['baby'][0]['name']
看到图案吗? [identifier] [attribute] [identifier] [attribute]
使用此数据结构,我们可以构建您的html输入,并假设有2个孩子和2个婴儿:
<?php
// assuming room number is 123
$room_number = '123';
?>
<!-- child 1 name -->
<label><input name="room[<?= $room_number ?>]['child'][0]['name']">Child 1 name</label>
<!-- child 1 birthdate -->
<label><input name="room[<?= $room_number ?>]['child'][0]['birthdate']">Child 1 birthdate</label>
<!-- child 2 name -->
<label><input name="room[<?= $room_number ?>]['child'][1]['name']">Child 2 name</label>
<!-- child 2 birthdate -->
<label><input name="room[<?= $room_number ?>]['child'][1]['birthdate']">Child 2 birthdate</label>
当您在php脚本中收到这些输入时,它将已经正确地形成为数组(我不包括成年人,并填写了示例值):
php > $room_number='123';
php > $room[$room_number]['child'][0]['birthdate'] = '20010-01-01';
php > $room[$room_number]['child'][0]['name'] ='Junior';
php > $room[$room_number]['child'][1]['birthdate'] = '2019-01-01';
php > $room[$room_number]['child'][1]['name'] = 'Bubba';
php > print_r($room);
Array
(
[123] => Array
(
[child] => Array
(
[0] => Array
(
[birthdate] => 20010-01-01
[name] => Junior
)
[1] => Array
(
[birthdate] => 2019-01-01
[name] => Bubba
)
)
)
)
可以很容易地将其输入json_encode:print json_encode($room);
但是,您可能会问计数(总计)是多少?
可以很容易地从数组结构中找出这些内容,因此实际上并不需要包含它们:
php > print count($room[$room_number]['child']);
2
php >
答案 1 :(得分:0)
您可以像这样使用json_encode函数:
json_encode(['rooms' => $rooms])