You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PHP接收表单提交的行式房间数组而非列式数组?

实现酒店房间表单的行式数组提交/转换

方案一:修改前端表单结构(推荐)

直接调整表单输入框的name属性,让前端提交时就生成目标行式数组结构,后端无需额外处理,这是最优雅的实现方式。

表单输入框命名规则

给每个动态添加的房间相关输入框设置如下name:

  • 房间类型:Room[][Type]
  • 床数:Room[][Beds]
  • 数量:Room[][Qty]

示例代码

静态初始房间模板:

<div class="room-item">
  <input type="text" name="Room[][Type]" placeholder="房间类型(如Double)">
  <input type="number" name="Room[][Beds]" placeholder="床数">
  <input type="number" name="Room[][Qty]" placeholder="数量">
</div>

动态添加房间的JS示例:

document.getElementById('add-room-btn').addEventListener('click', function() {
  const roomContainer = document.getElementById('rooms-container');
  const newRoom = document.createElement('div');
  newRoom.className = 'room-item';
  newRoom.innerHTML = `
    <input type="text" name="Room[][Type]" placeholder="房间类型(如Double)">
    <input type="number" name="Room[][Beds]" placeholder="床数">
    <input type="number" name="Room[][Qty]" placeholder="数量">
    <button class="remove-room-btn">删除</button>
  `;
  roomContainer.appendChild(newRoom);
});

// 删除房间逻辑
document.addEventListener('click', function(e) {
  if (e.target.classList.contains('remove-room-btn')) {
    e.target.closest('.room-item').remove();
  }
});

后端接收结果

提交后,PHP的$_POST['Room']会直接得到目标行式数组:

// 打印结果示例
Array (
  [Room] => Array (
    [0] => Array (
      [Type] => Double
      [Beds] => 2
      [Qty] => 29
    ),
    [1] => Array (
      [Type] => Single
      [Beds] => 1
      [Qty] => 15
    )
  )
)

方案二:后端PHP转换列式数组(无法修改前端时使用)

如果受限制无法修改前端代码,可以在PHP中手动将列式数组转换为行式数组。

转换代码示例

// 从POST中获取各列式数组,为空时设为默认空数组
$roomTypes = $_POST['RoomType'] ?? [];
$roomBeds = $_POST['RoomBeds'] ?? [];
$roomQtys = $_POST['RoomQty'] ?? [];

$rooms = [];
// 取三个数组的最大长度,避免遗漏数据
$maxCount = max(count($roomTypes), count($roomBeds), count($roomQtys));

for ($i = 0; $i < $maxCount; $i++) {
    $rooms[] = [
        'Type' => $roomTypes[$i] ?? null, // 索引不存在时设为null,可根据需求调整默认值
        'Beds' => $roomBeds[$i] ?? null,
        'Qty' => $roomQtys[$i] ?? null
    ];
}

// 组装成目标格式
$formattedData = ['Room' => $rooms];

注意事项

  • 确保三个列式数组的索引对应一致,避免数据错位
  • 可根据业务需求,对null值做额外处理(如过滤空房间、设置默认值等)

内容的提问来源于stack exchange,提问作者Mauro Ghiglia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:25:14