临时修复 php 8 中的 each() 函数(已解决)[重复]

Posted

技术标签:

【中文标题】临时修复 php 8 中的 each() 函数(已解决)[重复]【英文标题】:Temporarily fix each() function in php 8 (solved) [duplicate] 【发布时间】:2021-10-16 05:07:34 【问题描述】:

我正在更换服务器,我使用 php 8 从 centos 切换到 ubuntu 20.04。

我在服务器上的许多站点都使用这个旧类:https://github.com/xmyl/Snoopy-2.0/blob/master/Snoopy.class.php

这些网站已经存在很长时间了,我使用这个类来访问我的附属计划的各种用户名和密码保护区域,读取 xml/rss/csv 文件,并自动处理它们。

问题是这个类经常使用 each() 函数,该函数以前被弃用,现在在 php 8 中被淘汰。

我现在需要更改服务器(这不是预期的),并让这个类以某种方式工作。之后我可以平静地查看所有脚本、更新它们、修改它们等,但现在我需要一个快速简单的解决方案来让它工作。

我尝试将 each() 更改为 current(),然后添加:

/**
 * Adds the depreciated each() function back into 7.2
 */
if (!function_exists('each')) 
    function each($arr) 
        $key = key($arr);
        $result = ($key === null) ? false : [$key, current($arr), 'key' => $key, 'value' => current($arr)];
        next($arr);
        return $result;
    

效果不大,脚本以:Fatal error: Allowed memory size....结束。

有一种快速简便的方法可以让它工作吗? (暂时)或者是一个和 snoopy 一样有效的快速替代方案?


只是关闭...在 5 秒内解决...解决方案...

if (!function_exists('each')) 
    function each(array &$array) 
        $value = current($array);
        $key = key($array);

        if (is_null($key)) 
            return false;
        

        // Move pointer.
        next($array);

        return array(1 => $value, 'value' => $value, 0 => $key, 'key' => $key);
    

https://gist.github.com/k-gun/30dd2bf8b22329a2dbc11a045aed3859

【问题讨论】:

这是共享主机吗?供应商通常会让您选择运行的 PHP 版本。 gist.github.com/k-gun/30dd2bf8b22329a2dbc11a045aed3859 ***.com/a/46493221/222564 Barman -> 似乎工作...我一直在寻找 8 小时...在 5 秒内修复...:O...谢谢。 这能回答你的问题吗? How can I update code that uses the deprecated each() function? 【参考方案1】:

您需要通过引用将数组传递给您的each() 函数。当前写入数组的方式被复制到函数中,并且该副本的内部指针递增而不影响原始指针。

function each(&$arr) 
 /*...*/

【讨论】:

以上是关于临时修复 php 8 中的 each() 函数(已解决)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 已弃用:each() 函数已弃用 [重复]

如何更新使用已弃用 each() 函数的代码?

已弃用:each() 函数已弃用。 C:\xampp\htdocs\phprojekt\library\Zend\Cache\Backend.php 在第 66 行 [重复]

已弃用:each() 函数已弃用。 C:\xampp\apps\magento\htdocs\vendor\colinmollenhour\cache-backend-file\File.php 第

PHP 中的 each() 函数

如何在没有弃用的“each”函数的情况下重写这个 php“if”语句?