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

PHP7.2循环内操作数组变量返回结果异常问题咨询

问题原因与解决方案

这问题我之前也踩过坑!核心原因是闭包默认按值捕获变量——你写的use ($data)其实是把外部的$data复制了一份到闭包内部,闭包里修改的只是这个副本,外面的原始$data完全没被改动,所以最后输出自然还是初始的表头数组。

解决方法一:使用引用传递变量

把use ($data)改成use (&$data),这样闭包就会直接操作外部的原始数组,而不是副本。另外,追加元素其实不用array_merge,直接$data[] = $rowData更简洁高效:

$data = ['code','name'];
$submission->contributions->each(function (Contribution $contribution) use (&$data) {
    $rowData = [
        $contribution->employment->employer->code,
        $contribution->employment->employee->last_name,
    ];
    $data[] = $rowData; // 直接向原始数组追加行数据
});
print_r($data);

解决方法二:利用Laravel集合的map方法(更优雅)

既然用了Laravel的集合,不如用更符合集合风格的写法,避免引用带来的潜在副作用:先通过map把每个Contribution转换成对应的行数据,再转成数组后和表头合并:

// 先转换所有贡献数据为行数组
$rows = $submission->contributions->map(function (Contribution $contribution) {
    return [
        $contribution->employment->employer->code,
        $contribution->employment->employee->last_name,
    ];
})->toArray();

// 合并表头与行数据
$data = array_merge(['code','name'], $rows);
print_r($data);

这种方式逻辑更清晰,也符合Laravel的最佳实践,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:31:39