PHP如何通过foreach动态为数组添加索引与对应嵌套数组值?
问题分析与解决方案
你的问题主要出在两个关键点上:
- 每次循环都会完全覆盖
$resultArray['FirstBranch']的值,而不是在原有数组基础上追加新元素 - 原数组里的每个
$month是单元素子数组(比如['January']),不是直接的字符串月份,直接用它当键会引发错误或不符合预期的结果
修正后的代码
先初始化目标数组的分支为空白数组,再在循环里逐个添加月份对应的结构:
// 先定义你的原始月份数组 $months = [['January'], ['February'], ['March']]; $resultArray = []; // 初始化FirstBranch为空白数组,准备接收后续元素 $resultArray['FirstBranch'] = []; foreach ($months as $month) { // 取出子数组里的月份字符串 $monthName = $month[0]; // 向FirstBranch中追加当前月份的目标结构 $resultArray['FirstBranch'][$monthName] = ['Value', '%', 'Unit']; } // 输出验证结果 print_r($resultArray);
运行后你会得到预期的结构
Array ( [FirstBranch] => Array ( [January] => Array ( [0] => Value [1] => % [2] => Unit ) [February] => Array ( [0] => Value [1] => % [2] => Unit ) [March] => Array ( [0] => Value [1] => % [2] => Unit ) ) )
原代码失效的原因
你原来的循环里,每次都执行$resultArray['FirstBranch'] = array(...)——这相当于把FirstBranch反复重置为只包含当前月份的新数组,循环结束后自然只剩下最后一个月份的数据。我们需要的是向已存在的数组中添加新元素,所以要用$resultArray['FirstBranch'][$monthName] = ...的方式来追加。
另外,原数组的每个元素是子数组,必须通过$month[0]取出实际的月份字符串作为键,否则会把整个子数组当作键名,直接引发语法错误。
内容的提问来源于stack exchange,提问作者Brandon Asaph
相关产品推荐
相关产品推荐

