如何对两个关联数组正确使用foreach完成wpdb数据库更新
问题原因
你当前使用的嵌套foreach逻辑会生成笛卡尔积循环:2条更新数据搭配2条条件会总共执行4次数据库更新,完全不符合两个数组元素一一对应的需求。你实际需要的是$updates数组的第N项和$conditions数组的第N项配对执行更新,嵌套循环的写法完全打破了这种对应关系。
解决方案
两种写法都可以实现一一配对更新,适配你当前给出的数组结构:
方案1:for循环按下标遍历
提前校验两个数组长度一致,通过相同下标配对两个数组的元素,不会出现匹配错误:
// 校验数组长度一致,避免下标越界 if (count($updates) === count($conditions)) { $total = count($updates); for ($i = 0; $i < $total; $i++) { $wpdb->update( $table_name, $updates[$i], $conditions[$i] ); } }
方案2:foreach取键匹配
遍历其中一个数组时,获取当前元素的下标,直接取另一个数组同下标的元素配对即可:
foreach ($updates as $idx => $update_item) { // 校验对应条件项存在,避免报错 if (array_key_exists($idx, $conditions)) { $wpdb->update( $table_name, $update_item, $conditions[$idx] ); } }
注意事项
- 以上方案生效前提是两个数组的元素顺序严格对应:第一条更新数据匹配第一条更新条件,第二条更新数据匹配第二条更新条件,和你给出的数组结构完全匹配
- 建议在执行更新前增加数据合法性校验、操作权限校验,避免非法数据写入或者越权操作
wpdb->update执行后会返回更新成功的行数,返回false代表更新出错,可根据返回值做错误处理
内容的提问来源于stack exchange,提问作者ctlpquudz
相关产品推荐
相关产品推荐

