You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CakePHP 4.2中如何给Collection::map的$callback回调传递变量?

问题原因

这个报错是PHP匿名函数的默认作用域规则导致的:匿名函数默认无法直接访问父作用域定义的变量,和CakePHP的Collection组件无关。

解决方法

在匿名函数声明后通过use关键字手动导入需要使用的外部变量即可,修正后的代码如下:

$item = [
    'attributes' => [
        'class' => 'mon-li-{{id}}',
        'data-truc' => 'li-{{id}}'
    ],
    'linkAttrs' => ['class' => 'mon-lien', 'style' => 'text-transform: uppercase']
];

$id = 5;

$item = collection($item)
    ->map(function ($value, $key) use ($id) { // 这里通过use导入$id变量
        return preg_replace('/{{id}}/', $id, $value);
    })
    ->toArray();

补充说明

  • 如果你需要处理更深层级的多维数组替换,可以将map方法替换为CakePHP Collection提供的mapRecursive方法,它会自动递归遍历所有子元素执行回调逻辑
  • 如果你需要在匿名函数内修改外部变量的原值,需要给use导入的变量加上引用符号&,写法为use (&$id),你当前的场景仅需读取变量值,不需要加引用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:27:03