PHP如何为多维嵌套数组添加新键 批量新增指定字段实现方法
问题原因
你的代码出现问题核心有3点:
- PHP的
foreach默认是值传递,你修改的$data、$field都是原数组的临时副本,修改不会同步到原$datas数组 - 嵌套了多余的循环层,不需要遍历
$data的所有键、也不需要遍历$field的所有键 - 存在逻辑错误:
$data['data'] = $field直接把整个data子数组覆盖为单条记录,破坏了原有结构,也没有按规则匹配tipe的取值
正确实现方案
方式1:引用遍历(写法更简洁)
foreach ($datas as &$item) { // 第一层数组添加jenis键 $item['jenis'] = 'Data Warung'; // 遍历data下属的字段数组,添加tipe键 foreach ($item['data'] as &$field) { $field['tipe'] = $field['field'] == 'Warung' ? 'text' : 'uang'; } // 销毁引用,避免后续操作出现意外覆盖 unset($field); } unset($item); // 验证结果 print_r($datas);
方式2:索引遍历(无需处理引用销毁问题)
foreach ($datas as $itemKey => $item) { // 给第一层元素加jenis键 $datas[$itemKey]['jenis'] = 'Data Warung'; // 处理data下属字段的tipe键 foreach ($item['data'] as $fieldKey => $field) { $datas[$itemKey]['data'][$fieldKey]['tipe'] = $field['field'] == 'Warung' ? 'text' : 'uang'; } }
两种写法运行后都可以得到你需要的数组结构。
内容的提问来源于stack exchange,提问作者Eko Rudiyanto jay
相关产品推荐
相关产品推荐

