Php 返回新集合而不修改原始集合
我有一个Laravel集合,我想将它的一个属性值修改为负整数。为此,我使用了collectionPhp 返回新集合而不修改原始集合,php,laravel-5,collections,eloquent,Php,Laravel 5,Collections,Eloquent,我有一个Laravel集合,我想将它的一个属性值修改为负整数。为此,我使用了collectionmap方法,但它也修改了原始集合 我的代码: $modified_revenue_data = $revenue_data->map(function ($item) { if ($item->is_claw_back == 1 && $item->claw_back_date != null) { return $item->reven
map
方法,但它也修改了原始集合
我的代码:
$modified_revenue_data = $revenue_data->map(function ($item) {
if ($item->is_claw_back == 1 && $item->claw_back_date != null) {
return $item->revenue = $item->revenue * -1;
}
return $item;
});
我想将新集合存储到$modified\u revenue\u data
中,但$revenue\u data
也已修改
不修改原始集合的正确方法是什么?不应更新原始集合。我已经运行了一个小测试,可以确认这是
map()
方法的行为:
$a = collect([1, 2, 3, 4, 5]);
$b = $a->map(function ($el) {
return $el * 2;
});
dd($b);
该行为也在以下文件中说明:
地图()
与大多数其他收集方法一样,map返回一个新的收集
实例它不会修改调用它的集合。如果
要转换原始集合,请使用transform()
方法
这是一个一维集合。我在多维集合中遇到问题,我只想更改其中一个属性。@FahadShaikh应该是相同的。映射的结果应该存储在新创建的集合中,而不是更改前一个。@Dancantr我不是OP,是Fahad Shaikh。@KennyHorna哦,对不起,我的错@肯尼霍纳:你的收藏没有被修改。我不知道为什么是我的?
=> Illuminate\Support\Collection {#3726
all: [
2,
4,
6,
8,
10,
],
}
dd($a);
=> Illuminate\Support\Collection {#3743
all: [
1,
2,
3,
4,
5,
],
}