为什么iterator_to_array方法会报Array to string conversion这个错误呢?

参考了这个帖子:博客:查询最近几天每日的登陆数量,没有数量的补零

将没有数据的月份补零。

代码如下:

//迭代器
$months_period = \Carbon\Carbon::parse(date('y-m-d',strtotime("-12 month")))->monthsUntil(date('y-m-d'));

//从数据库查询出来的数据,按照月份分组
$receiptNum = CrmReceipt::whereHas('CrmContract.CrmCustomer', function ($query) {
    $query->where('admin_user_id', Admin::user()->id);
})->selectRaw('DATE_FORMAT(updated_at,"%Y-%m") as date,SUM(receive) as value')->whereBetween('updated_at', [
    $months_period->first()->toDateString(),
    $months_period->last()->addMonths()->toDateString(),
    ])->groupBy('date')->pluck('value', 'date')->toArray();

// 建立连续的月份区间数组
$this->receiptNum = iterator_to_array(
    $months_period->map( function ($month) use ($receiptNum) {
        $month_str = date('Y-m',strtotime($month));
        return [
        'date' => $month_str,
        'value' => $receiptNum[$month_str] ?? 0,
        ];
    })
    );
//这里打印是可以输出正常数组的
dd($this->receiptNum);

但是如果注释掉打印,运行。就出现这个错误

Array to string conversion

经查,是这段出现的问题

$this->receiptNum = iterator_to_array(
    $months_period->map( function ($month) use ($receiptNum) {
        $month_str = date('Y-m',strtotime($month));
        return [
        'date' => $month_str,
        'value' => $receiptNum[$month_str] ?? 0,
        ];
    })
    );

如果直接这样就不报错

$this->receiptNum = iterator_to_array(
    $months_period
);

请问是为什么呢?找了很久,一直没找到什么问题。。。

乌鸦嘴新手社区 wyz.xyz 为技术新手提供服务
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
3年前 评论
LiamHao 3年前
讨论数量: 1
3年前 评论
LiamHao 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!