PHP如何使用索引数组作为嵌套数组下标插入指定值
实现方案
你可以通过PHP的引用传递来追踪嵌套数组的当前层级,实现按索引数组批量嵌套赋值的需求,完整实现代码如下:
<?php $indexes = [0, 1, 4]; $value_to_insert = 820; $array_to_fill = []; // 初始化引用指向根数组 $current = &$array_to_fill; foreach ($indexes as $key => $index) { // 最后一个索引直接赋值目标值 if ($key === array_key_last($indexes)) { $current[$index] = $value_to_insert; break; } // 中间层级不存在则初始化为空数组 if (!isset($current[$index]) || !is_array($current[$index])) { $current[$index] = []; } // 引用移动到下一层级 $current = &$current[$index]; } // 销毁引用避免后续操作污染原数组 unset($current); // 打印验证结果 var_dump($array_to_fill);
运行代码后得到的$array_to_fill结构和你需要的$array_tree完全一致。
如果你想要类似$array_to_fill[$indexes] = 820的简洁调用方式,可以封装为独立的辅助函数:
function nested_assign(array &$target, array $indexes, $value): void { $current = &$target; foreach ($indexes as $key => $index) { if ($key === array_key_last($indexes)) { $current[$index] = $value; break; } if (!isset($current[$index]) || !is_array($current[$index])) { $current[$index] = []; } $current = &$current[$index]; } unset($current); } // 调用示例 nested_assign($array_to_fill, $indexes, 820);
注意事项
- 全程使用引用操作数组层级,不会产生额外的数组副本,性能消耗极低
- 自动兼容中间层级未提前初始化的场景
- 操作完成后必须销毁引用,否则后续对
$current变量的赋值会意外修改数组的最后一层
内容的提问来源于stack exchange,提问作者DiscreteTomatoes
相关产品推荐
相关产品推荐

