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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:45:29