PHP处理数据库结果集时更新数组meet_time字段不生效问题求助
问题原因
array_replace函数不会修改传入的原数组,而是返回替换后的新数组,你当前代码没有接收该返回值,所有替换操作都没有生效。- 你传入
array_replace的替换参数结构错误:你需要修改的是当前遍历项的meet_time字段,而不是把原始meet_time的值当作外层$results数组的键做替换。 - 遍历过程中直接用
$v取值是值拷贝,修改$v不会同步到原$results数组,且你存入$b数组的是未修改的原始meet_time值,排序逻辑也会不符合预期。
修正后的代码
无需使用array_replace,直接修改数组字段更简单高效,处理函数调整如下:
function process_values($results) { $b = []; // 加&取引用,修改$v会同步到原$results数组 foreach($results as $k => &$v) { if ($v['sun'] == '1') { $v['meet_time'] = '1800'; } if ($v['mon'] == '1') { $v['meet_time'] = '1200'; } // 存入修改后的meet_time用于排序 $b[$k] = $v['meet_time']; } // 取消引用,避免后续意外修改 unset($v); asort($b); $c = []; foreach ($b as $k => $v) { $c[] = $results[$k]; } return $c; }
其余调用、输出代码无需调整,运行后即可得到预期的1200、1800输出。
可选兼容写法
如果不想使用引用,也可以直接修改外层数组的对应项,效果完全一致:
foreach($results as $k => $v) { if ($v['sun'] == '1') { $results[$k]['meet_time'] = '1800'; } if ($v['mon'] == '1') { $results[$k]['meet_time'] = '1200'; } $b[$k] = $results[$k]['meet_time']; }
内容的提问来源于stack exchange,提问作者LyleCrumbstorm
相关产品推荐
相关产品推荐

