You need to enable JavaScript to run this app. PHP each()函数废弃报错替换为foreach后异常,求正确修复方案
优惠活动
大模型
产品
解决方案
定价
更多

PHP each()函数废弃报错替换为foreach后异常,求正确修复方案

PHP each() 函数弃用报错修复方案

报错原因

PHP 7.2及以上版本已经正式弃用each()函数,所以会抛出对应的Deprecated警告,属于PHP版本升级后的常见兼容性问题。

直接替换foreach失效的原因

each()函数返回的是当前数组指针位置对应的包含键、值双元素的数组,结构为[0 => 键名, 1 => 键值, 'key' => 键名, 'value' => 键值],赋值给$activity后,后续代码大概率同时用到了键、值两个维度的内容。
你直接用foreach($array as $activity)替换后,$activity仅能拿到原数组的键值,丢失了键名维度的信息,原有逻辑被破坏所以问题更严重。

正确修复方法

方案1:兼容原有逻辑的foreach改写(推荐)

不需要修改循环内的原有代码,只要调整循环头并补充一行结构兼容代码即可:

foreach($this->element_activities[ $tag ] as $key => $value) {
    // 构造和each()返回结构完全一致的$activity变量
    $activity = [0 => $key, 1 => $value, 'key' => $key, 'value' => $value];
    // 此处保留你原来while循环内的所有代码无需改动
}

方案2:指针遍历改写

如果原有逻辑依赖数组指针的移动特性,可以用官方推荐的指针函数组合替代:

// 先重置数组指针保证遍历从头部开始
reset($this->element_activities[ $tag ]);
while ( $value = current($this->element_activities[ $tag ]) ) {
    $key = key($this->element_activities[ $tag ]);
    $activity = [0 => $key, 1 => $value, 'key' => $key, 'value' => $value];
    // 移动指针到下一位,对应each()的指针移动逻辑
    next($this->element_activities[ $tag ]);
    // 此处保留你原来while循环内的所有代码无需改动
}

额外说明

如果确认原有循环内只用到了$activity['value']或者$activity[1]的内容,也可以直接简化为foreach($this->element_activities[ $tag ] as $activity),同时把循环内所有$activity['value']/$activity[1]的引用直接改成$activity即可。

内容的提问来源于stack exchange,提问作者Mayte Alava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 20:15:04