
在 php 中使用 foreach 循环构建关联数组时,若在循环内重复赋值给同一变量,会导致前序数据被覆盖;正确做法是预先初始化数组,再在循环中逐项追加键值对。
当你写如下代码时:
foreach ($reviewers as $login_name => $common_name) {
$allowed_values = [
'' => 'All',
$login_name => $common_name,
];
}每次迭代都会重新声明并覆盖整个 $allowed_values 数组,最终只保留最后一次循环的两个元素(空键 'All' 和最后一个 $login_name => $common_name),因此无法收集全部评审员数据。
✅ 正确写法是:先初始化基础结构,再在循环中扩展:
// 初始化包含默认选项的数组
$allowed_values = ['' => 'All'];
// 遍历 reviewers,逐个添加键值对
foreach ($reviewers as $login_name => $common_name) {
$allowed_values[$login_name] = $common_name;
}这样,$allowed_values 会累积所有评审员条目,例如:
[ '' => 'All', 'jdoe' => 'John Doe', 'asmith' => 'Alice Smith', 'rbrown' => 'Robert Brown' ]
⚠️ 注意事项:
- 不要在循环体内用 = 重新赋值整个数组,而应使用 [] 语法追加元素;
- 若 $reviewers 为空,$allowed_values 仍保留 'All' 选项,逻辑健壮;
- 如需去重或排序,可在循环后调用 array_unique() 或 ksort() 等函数。










