如何在jQuery中构建二维数组,AJAX传递后在PHP中遍历?
问题根因
你前端构建的mediaIdsArray不是索引型二维数组,是对象数组,jQuery通过POST提交到PHP后会被解析为「索引数组嵌套关联数组」的结构,你使用$mediaId[0][0]这类数字索引取值自然返回null,子数组的键是你定义的字符串id_media和bijschrift。
修复步骤
- 先修复前端代码的语法错误:你构建数组的代码里多写了一个单引号,修正后如下:
mediaIdsArray.push({ 'id_media' : id, 'bijschrift' : bijschrift.val() // 去掉了多余的单引号 });
- PHP侧正确遍历代码:
<?php // 先校验参数合法性避免报错 if (isset($_POST['mediaIds']) && is_array($_POST['mediaIds'])) { $mediaIdsArray = $_POST['mediaIds']; foreach ($mediaIdsArray as $mediaItem) { // 用字符串键名取值即可 $id_media = $mediaItem['id_media']; $bijschrift = $mediaItem['bijschrift']; // 此处写入你的数据库更新逻辑 } } ?>
可选兼容方案
如果仍存在解析异常,可以手动将前端数组转为JSON字符串传递,避免jQuery自动解析的兼容问题:
- 前端AJAX参数修改:
data:{ publish:publish, id:id, title:title.trim(), content:content.trim(), mediaIds: JSON.stringify(mediaIdsArray) // 转成JSON字符串 },
- PHP侧接收代码修改:
<?php if (isset($_POST['mediaIds'])) { $mediaIdsArray = json_decode($_POST['mediaIds'], true); // 第二个参数true转成关联数组 foreach ($mediaIdsArray as $mediaItem) { $id_media = $mediaItem['id_media']; $bijschrift = $mediaItem['bijschrift']; // 业务逻辑 } } ?>
内容的提问来源于stack exchange,提问作者Nico van Wijk
相关产品推荐
相关产品推荐

