當前端表單包含多組同名字段(如動態添加的明細行)時,PHP 需正確接收並聚合數據。本文對比錯誤與正確做法,給出通用處理模式。
<input name="part" /> <input name="transysno" /> ...
<input name="part" /> <input name="transysno" /> ...
$_POST['part'] 只會保留最後一個值,前面的數據丟失。
<input name="part[]" /> <input name="transysno[]" /> <input name="tranlineid[]" /> <input name="count[]" />
<input name="part[]" /> <input name="transysno[]" /> <input name="tranlineid[]" /> <input name="count[]" />
PHP 接收到的是索引數組:
$_POST['part'] = ['val1', 'val2'];
$_POST['transysno'] = ['sn1', 'sn2'];
// ...
$groups = [];
$count = count($_POST['part']);
for ($i = 0; $i < $count; $i++) {
$key = $_POST['part'][$i] . '|' . $_POST['transysno'][$i] . '|' . $_POST['tranlineid'][$i];
if (!isset($groups[$key])) {
$groups[$key] = [
'part' => $_POST['part'][$i],
'transysno' => $_POST['transysno'][$i],
'tranlineid' => $_POST['tranlineid'][$i],
'total_count' => 0
];
}
$groups[$key]['total_count'] += (int)$_POST['count'][$i];
}
// $groups 即為按三字段去重聚合後的結果
print_r($groups);
name="items[0][part]" 結構化命名,後端直接 foreach ($_POST['items'] as $item) 遍歷更清晰。規範的數組命名 + 服務端聚合邏輯,輕鬆應對動態表單的數據處理挑戰。