Laravel报错Unsupported operand types: int * Collection,求计算逻辑修复
问题描述
集合返回的是整数,但计算时出现类型不匹配错误,代码如下:
'data' => $firstCalc->map(function($item) use ($secondCalc) { return ($item->pluck('rate')->first() * $secondCalc->map(function($secondItem){ return $secondItem->pluck('rate')->first() /100; })); }),
运行后报错:
Unsupported operand types: int * Illuminate\Support\Collection
错误出现在这一行:return ($item->pluck('rate')->first() * $secondCalc->map(function($secondItem){
修复方案
错误原因
$secondCalc->map(...)方法会返回一个新的Illuminate\Support\Collection集合对象,你直接用整数和集合做乘法运算,PHP不支持这种操作,导致类型不匹配报错。
针对不同需求的修复代码
需求1:将第一个集合的每个rate,与第二个集合所有rate除以100后的总和相乘
使用sum方法替代map,先计算总和再执行乘法:
'data' => $firstCalc->map(function($item) use ($secondCalc) { // 计算第二个集合所有rate除以100的总和 $secondRateSum = $secondCalc->sum(function($secondItem) { return $secondItem->pluck('rate')->first() / 100; }); // 执行整数乘数值的运算 return $item->pluck('rate')->first() * $secondRateSum; }),
需求2:将第一个集合的每个rate,与第二个集合的每个rate分别相乘
把乘法逻辑移到内层map中,确保每次都是整数与单个数值运算:
'data' => $firstCalc->map(function($item) use ($secondCalc) { $firstRate = $item->pluck('rate')->first(); // 对第二个集合的每个item,计算对应乘积 return $secondCalc->map(function($secondItem) use ($firstRate) { return $firstRate * ($secondItem->pluck('rate')->first() / 100); }); }),
内容的提问来源于stack exchange,提问作者user2682025
相关产品推荐
相关产品推荐

