如何通过JS向隐藏输入框传入数组,使PHP端接收为多维数组?
问题:如何让PHP接收的$_POST数组呈现期望的数组结构?
现有代码
HTML表单
<form id="su" action="su.php" method="POST" onsubmit="sendQuestions(event)"> <input type='hidden' name="questions[]" id="questions"/> <button type="submit">Generate Quiz</button> </form>
JavaScript提交逻辑
function sendQuestions(e){ e.preventDefault() let form = document.getElementById('su') let ques = document.getElementById('questions') var x = [5,10] ques.value = x; form.submit(); }
当前PHP接收结果
Array ( [questions] => Array ( [0] => 5,10 ) )
期望的PHP接收结构
Array ( [questions] => Array ( [0] => 5 [1] => 10 ) )
解决方案
方法1:动态创建多个隐藏输入框(推荐)
修改JavaScript逻辑,循环数组元素,为每个元素创建一个name="questions[]"的隐藏输入框,PHP会自动将它们解析为数组的独立元素:
function sendQuestions(e){ e.preventDefault() let form = document.getElementById('su') // 移除原有单个隐藏输入框 document.getElementById('questions').remove() var x = [5,10] // 循环生成对应输入框 x.forEach(item => { let input = document.createElement('input') input.type = 'hidden' input.name = 'questions[]' input.value = item form.appendChild(input) }) form.submit() }
方法2:PHP端拆分字符串(仅适用于元素无逗号的场景)
如果不想修改前端代码,可在PHP接收后按逗号拆分字符串,但元素含逗号时会出错,不推荐:
if(isset($_POST['questions'][0])){ $_POST['questions'] = explode(',', $_POST['questions'][0]); } print_r($_POST);
方法3:JSON格式传递
前端将数组转为JSON字符串,PHP端解析为数组:
前端修改
function sendQuestions(e){ e.preventDefault() let form = document.getElementById('su') let ques = document.getElementById('questions') var x = [5,10] ques.value = JSON.stringify(x); form.submit(); }
PHP端处理
if(isset($_POST['questions'][0])){ $_POST['questions'] = json_decode($_POST['questions'][0], true); } print_r($_POST);
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

