将 PHP 5.3 匿名函数转换为 5.2 兼容函数

2023-12-26

我在另一个函数中有这个匿名函数 $build_tree ,它在 PHP 5.3 中运行良好

function nest_list($list) {
$index = array();
index_nodes($list, $index);

$build_tree = function(&$value, $key) use ($index, &$updated) {
    if(array_key_exists($key, $index)) {
        $value = $index[$key];
        $updated = true;
     todel($key); }
};

do {
    $updated = false;
    array_walk_recursive($list, $build_tree);
} while($updated);

return $list;
}

function index_nodes($nodes, &$index) {
    foreach($nodes as $key => $value) {
    if ($value) {
        $index[$key] = $value;
        index_nodes($value, $index);
                }
    }
}

如何将其转换为 PHP 5.2 兼容代码?


通常,您可以使用对象的方法来完成此操作(回调可以是函数,也可以是对象的方法;后者允许您维护状态)。像这样的东西(未测试):

class BuildTree {
    public $index, $updated = false;
    public function __construct($index) {
        $this->index = $index;
    }
    function foo(&$value, $key) {
        if(array_key_exists($key, $this->index)) {
            $value = $this-.index[$key];
            $this->updated = true;
         todel($key); }
    }
}

do {
    $build_tree_obj = new BuildTree($index);
    array_walk_recursive($list, array($build_tree_obj, 'foo'));
} while($build_tree_obj->updated);

然而,array_walk_recursive有一个特殊功能,允许我们传递第三个参数,该参数将传递到函数的每次调用中。虽然值是按值传递的,但我们可以巧妙地使用对象(PHP 5 中的引用类型)来维护状态(从如何在 PHP 中将多维数组“展平”为简单数组? https://stackoverflow.com/questions/526556/):

$build_tree = create_function('&$value, $key, $obj', '
    if(array_key_exists($key, $index)) {
        $value = $index[$key];
        $updated = true;
     todel($key); }
');

do {
    $obj = (object)array('updated' => false);
    array_walk_recursive($list, $build_tree, $obj);
} while($obj->updated);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 PHP 5.3 匿名函数转换为 5.2 兼容函数 的相关文章

  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 从关系中合并 Laravel 中的集合

    假设我有 3 张桌子 Images Subject Style 关系是多对多 图像 主题 和多对多 图像 样式 现在我想做一些类似的事情 result subjectResult gt images gt merge styleResult
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 通过php将mp3转换为ogg

    我有一个网站 用户可以上传音乐并将其转换为 mp3 但我需要 mp3 和 ogg 文件支持才能以 html5 播放音乐 那么 有没有可以将mp3转换为ogg的php脚本呢 使用 ffmpeg 您可以直接从 php 脚本执行命令
  • PHP:是否可以从文件内容(字符串)创建 SplFileObject 对象?

    例如 contents file get contents image png 是否可以从 contents 创建 SplFileObject 对象 Thanks php 有一些特殊的流包装器 http www php net manual
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建
  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • PHP:在多维数组中查找相同的键并合并结果

    我有一个多维数组 如下所示 array 0 gt array WS gt array id gt 2 name gt hello 1 gt array SS gt array id gt 1 name gt hello2 2 gt arra
  • HTTP_REFERER 返回 NULL,$_SERVER 中不存在密钥

    使用以来第一次 SERVER HTTP REFERER 它给了我NULL因此 当我做var dump SERVER the HTTP REFERER密钥不存在 我还尝试使用不同的浏览器和不同的网站访问网站 但没有结果 该网站在基于 Linu
  • 正则表达式替换混合数字+字符串

    我想删除所有包含数字的单词 示例 LW23 London W98 String 从上面的字符串中我唯一想保留的是 London String 这可以用正则表达式来完成吗 我目前正在使用 Python 但 PHP 代码也很好 Thanks E
  • 从单个 javascript 函数向两个不同的 PHP 脚本发送两个 Ajax 请求

    是否可以同时向两个或多个 Php 脚本发送 Ajax 请求 我知道这可以串行实现 从 1 获取响应 然后从另一个获取响应 但我想知道是否可以同时实现 请协助我使用以下代码 function calShowUpload if http rea
  • 获取目录中最后修改的文件

    有没有办法只选择目录中的最后一个文件 扩展名jpg png gif 或者我是否必须解析整个目录并使用进行检查filemtime 是的 你必须通读它们 但由于目录访问已被缓存 因此您不必真正担心它 files array merge glob
  • 如何在PHP中将图像从内存上传到AWS S3?

    所以我目前有一个使用 AWS S3 上传图像的上传系统 这是代码 Upload image to S3 s3 Aws S3 S3Client factory array key gt mykey secret gt myskey try s
  • PHP OOP 静态属性语法错误 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 为什么不
  • 将自定义参数传递给 Symfony2 中的自定义 ValidationConstraint

    我正在 Symfony2 中创建一个表单 表格只包含一个book字段允许用户在列表中进行选择Books实体 我需要检查是否选择了Book属于Author我的控制器里有 public class MyFormType extends Abst
  • 使用 Flot、html、PHP 和 MySql 查询绘制多个图表

    我正在尝试使用 Flot html PHP 和 MySql 查询绘制多个图表 但我陷入了困境 因为我找不到在同一个 html 页面中绘制多个 flot 的方法 为简单起见 在数据库 test db3 映像中包含以下字段 表1 用户名 发送邮
  • 如何编写可以补偿拼写错误数据的 MySQL 搜索?

    有没有什么方法可以编写一个 MySQL 搜索来弥补用户在拼写等方面的错误 作为随机示例 有人可能会输入 电子邮件受保护 cdn cgi l email protection代替 电子邮件受保护 cdn cgi l email protect
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • 如何在php中关闭夏令时

    我有这行代码将夏令时设置为 打开 将其设置为 关闭 的正确方法是什么 is daylight saving On rcmail config dst active bool date I date I 这是一个大写字母 i 当当前默认时区
  • PHP 文件上传帮助

    div align center div 这是我的代码

随机推荐

  • Java - 设置类路径

    我的示例应用程序告诉我 No qtjambi deployment xml found in classpath loading libraries via java library path 我希望我的应用程序使用qtjambi depl
  • 从 PowerShell 运行 cmd /c,文件路径中包含空格

    我正在尝试在 PowerShell 中运行以下命令 PS C Users Administrator gt cmd c C Program Files x86 Microsoft Visual Studio 2017 BuildTools
  • 为什么我会看到“Nodetool 状态连接被拒绝”?

    我已经通过运行 Ubuntu 16 的 EC2 实例上的服务安装了 Cassandra 但我一生都无法理解为什么我无法使 nodetool 状态正常工作 我听说我应该更改 cassanda env sh 以包含主机名 我已经在这里完成了 a
  • 在 MATLAB 中使用 Levenberg-Marquardt (lsqcurvefit) 获取协方差矩阵

    我正在使用 Matlab 中的 lsqcurvefit 函数对一些实验数据进行建模 数据采用特定的形状 因此算法只是调整该形状的系数来改变其幅度等 该模型运行良好并且拟合良好 我已经计算了卡方 Levenberg Marquardt 算法的
  • 为什么要使用开始活动?

    我一直在浏览 API 文档 并注意到从 API 级别 16 开始Context http developer android com reference android content Context html类包含以下方法 public
  • 使用房间时“无法合并 dex”

    我正在尝试向我的项目添加一个 房间 当我尝试构建项目时 出现错误 错误 任务 app transformDexArchiveWithExternalLibsDexMergerForDebug 执行失败 java lang RuntimeEx
  • 将 IDataErrorInfo 与嵌套对象结合使用

    我正在使用 MVVM 我想使用 IDataErrorInfo 来验证我的视图 我当前的实现包括嵌套对象和不同的 ViewModel 例如业务实体 客户 包含业务实体 地址 我在我的视图中直接访问地址 例如 Customer Address
  • 如何使 Protobuf 3 字段成为必填字段?

    我正在使用 GRPC proto buffers 在 GoLang 中编写我的第一个 API 端点 我对 Go 还很陌生 以下是我为测试用例编写的文件 package my package import context testing gi
  • 未找到 Mysqli 类。使用percona、php5-fpm、nginx、phalcon

    Fatal error Class TKStdlib mysqli not found in var www tk browser app application library tk stdlib DbAbstract php on li
  • 如何在rails中自定义bulma变量

    我正在使用 bulmarails gem 我想自定义它使用的一些变量 特别是字体颜色 根据布尔玛文档http bulma io documentation overview customize http bulma io documenta
  • Kubernetes 服务到底是什么以及它们与部署有何不同

    在阅读了这样的 Kubernetes 文档后 部署 https kubernetes io docs concepts workloads controllers deployment service https kubernetes io
  • 检查渲染方法

    我正在使用react redux 和react redux router 当我运行应用程序时 出现错误 我不明白它与我的 App js 中的 React 渲染函数有什么关系 在我看来 问题出在代码的其他地方 错误如下 Warning Rea
  • 如何在“map”对象中编写 OpenAPI 3 (Swagger) 规范的属性名称?

    我试图描述的 API 具有一个结构 其中根对象可以包含任意数量的子对象 属性本身就是对象 根对象中的 键 或属性是子对象的唯一标识符 值是子对象的其余数据 child1 bunch of stuff child2 bunch of stuf
  • Oracle 的 C# 参数化查询 - 严重且危险的错误!

    这绝对是一个嚎叫 我不敢相信自己的眼睛 而且我不敢相信 如果这是 C 中的一个真正的错误 那么在我之前没有人会发现这一点 所以我将其发布给开发人员社区的其他成员 让他们告诉我我做错了什么 我确信这个问题会让我说 DOH 然后用手掌用力拍打我
  • 将列中的任意字符串替换为 1

    我正在和熊猫一起工作 我的目标是将数据帧中包含 NaN 或字符串数 据的几列转换为或多或少的虚拟变量 0 代表 NaN 1 代表任何字符串 我想在不使用完整的字符串列表并替换它们的情况下执行此操作 因为存在拼写错误 这会导致错误 我已经能够
  • 通过 api.linkedin.com/v2/shares 检索共享时排序不正确

    根据文档 https learn microsoft com en us linkedin marketing integrations community management shares share api retrieve shar
  • DPDK RX/TX 回调示例应用程序中没有流量出现

    我是DPDK领域的新生 我从 DPDK 主页给出的示例应用程序开始 我被这个例子困住了 DPDK RX TX 回调示例应用程序 https doc dpdk org guides sample app ug rxtx callbacks h
  • Android检测webview URL变化

    我的 android 应用程序中有一个 webview 希望检测 url 何时发生变化 我想用它来当用户位于 info php 页面上时隐藏顶部栏中的信息按钮 并在用户不在 info php 页面上时再次显示该按钮 我用谷歌搜索但找不到任何
  • 如何将数组数据从javascript发送到flask

    如何将数组从 javascript 发送到 python Flask ajax 没有将数组 值 返回到 Flask 路由 任何人都可以帮助解决这些错误 flask route app route admin methods POST GET
  • 将 PHP 5.3 匿名函数转换为 5.2 兼容函数

    我在另一个函数中有这个匿名函数 build tree 它在 PHP 5 3 中运行良好 function nest list list index array index nodes list index build tree functi