PHP二维数组管理:表单提交数组的存储与读取问题
处理表单提交的二维数组并保存到新数组
嘿,作为编程新手碰到这种数组结构的问题太正常了,我来帮你把这个问题捋清楚~
首先得先明白你从$_POST['lastnames']拿到的数组是什么结构:因为你的HTML输入框用了lastnames[1][]、lastnames[2][]这种命名方式,提交后PHP接收到的是一个二维数组——外层数组的键是你写的1、2,每个键对应的值又是一个一维数组(因为你用了[],表示这个位置会自动生成索引,默认从0开始)。举个例子,如果两个输入框分别填了"Smith"和"Johnson",那$_POST['lastnames']大概长这样:
Array( [1] => Array([0] => "Smith"), [2] => Array([0] => "Johnson") )
接下来分两种情况给你说怎么把值存到新数组并读取:
情况1:把所有姓氏整理成一维数组(去掉外层的1、2键)
如果你想把所有输入的姓氏合并成一个简单的一维数组,可以用循环加数组合并的方式:
// 先初始化一个空的新数组 $new_lastnames = []; // 先判断一下是否存在合法的数组数据,避免报错 if (isset($_POST['lastnames']) && is_array($_POST['lastnames'])) { // 遍历外层的二维数组 foreach ($_POST['lastnames'] as $name_group) { // 把每个子数组里的内容合并到新数组里 $new_lastnames = array_merge($new_lastnames, $name_group); } // 现在就可以读取新数组的值了,比如遍历输出 foreach ($new_lastnames as $lastname) { echo "姓氏:{$lastname}<br>"; } } else { echo "没有接收到有效的姓氏数据哦"; }
情况2:保留原有的二维结构,复制到新数组
如果你想保留原来的键(1、2)和二维结构,直接赋值就可以创建数组的副本:
// 同样先做存在性判断 if (isset($_POST['lastnames']) && is_array($_POST['lastnames'])) { // 直接赋值,得到一个和原数组结构完全一样的新数组 $new_lastnames = $_POST['lastnames']; // 读取的方式也和原数组一样,比如取第1组的第一个值 echo "第1组姓氏:{$new_lastnames[1][0]}<br>"; // 或者遍历所有组 foreach ($new_lastnames as $group_key => $name_group) { echo "第{$group_key}组姓氏:{$name_group[0]}<br>"; } } else { echo "没有接收到有效的姓氏数据哦"; }
额外提醒(非常重要!)
- 表单验证不能少:上面的代码里加了
isset()和is_array()判断,就是为了防止用户直接访问PHP文件或者表单没正确提交时出现报错。 - 数据库存储要防注入:如果之后要把这些值存到数据库,千万不要直接把变量拼到SQL语句里!一定要用PDO或者mysqli的预处理语句,比如用PDO的话大致是这样:
// 假设你已经连接好了数据库($pdo是PDO实例) $stmt = $pdo->prepare("INSERT INTO your_table (lastname) VALUES (?)"); foreach ($new_lastnames as $lastname) { $stmt->execute([$lastname]); }
内容的提问来源于stack exchange,提问作者Sirka Mary
相关产品推荐
相关产品推荐

