使用array_replace_recursive时如何不覆盖数组
Posted
技术标签:
【中文标题】使用array_replace_recursive时如何不覆盖数组【英文标题】:How to not overwrite array when using array_replace_recursive 【发布时间】:2022-01-12 23:34:08 【问题描述】:我正在使用 array_replace_recursive 在 laravel 控制器中合并两个数组
$sub = collect($getsubject)->toArray();
$ter = collect($getterm)->toArray();
$report=array_replace_recursive($sub,$ter);
这很好用,只是键或索引 0 被另一个数组的索引 0 替换。如何在不覆盖键相似的数组数据的情况下获得相同的合并行为?
【问题讨论】:
你试过array_merge
吗?
索引数组将被“无知”替换。如果您想尊重关联替换,那么您需要用 non-numeric 关联键替换索引。通过edit 作为minimal reproducible example 的一部分在您的问题中包含示例数据和您想要的输出可能是一个好主意。
【参考方案1】:
由于你使用了laravel的集合类,你有没有试过使用"merge()"辅助函数?
来自 laravel 的文档:“merge 方法将给定的数组或集合与原始集合合并。如果给定项中的字符串键与原始集合中的字符串键匹配,则给定项的值将覆盖原始集合中的值:" [...] 如果给定项的键是数字,则值将附加到集合的末尾:
你可以这样做:
$sub = collect($getsubject);
$report= $sub->merge(collect($getterm));
$report->all(); //displays the final result
更多信息here.
【讨论】:
以上是关于使用array_replace_recursive时如何不覆盖数组的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?