Laravel是否存在不修改原集合的put()等效非突变集合方法
Laravel 集合无修改副作用的
put()替代方案 Laravel 原生没有提供和put()签名完全一致、且不改动原集合的专用集合方法,你目前使用的merge()就是官方生态下最通用的实现方式,完全满足不可变操作的需求。
不同实现方式的说明
- 原生
put()属于可变操作:执行后会直接在当前集合实例上新增/覆盖对应键值对,不会返回新集合,会修改原集合内容。 merge()实现:对于字符串键的关联集合场景,merge()的表现和put()完全对齐,传入的键不存在则新增、存在则覆盖,全程不会改动原集合,直接返回包含修改内容的全新集合实例,完全匹配你期望的效果:
<?php $collection = collect(['key' => 'value']); $new = $collection->merge(['another' => 'pair']); $collection; // 输出: ['key' => 'value'] 原集合无变化 $new; // 输出: ['key' => 'value', 'another' => 'pair']
- 克隆后调用
put()的等价写法:如果你希望和put()的传参形式完全一致,不需要手动把键值对包裹成数组,可以先克隆原集合再调用put(),效果和上面的merge()完全一致,同样不会改动原集合:
$new = (clone $collection)->put('another', 'pair');
注意:如果是数字索引的集合,
merge()不会覆盖原有索引的元素,而是会把新元素追加到集合末尾,这种场景下如果要实现和put()按索引修改/新增的一致效果,优先用克隆后调用put()的写法。
内容的提问来源于stack exchange,提问作者Jacob Lockard
相关产品推荐
相关产品推荐

