php - 如何使用唯一键递归合并数组?
问题描述
我像这样创建我的数组:
foreach ($array as $key => $value) {
$array1[$value->getUuid()][$value->getFields()->getName()] = $value->getContent();
}
结果是array1:
array:2 [▼
"d8ab80f4f6" => array:16 [▶]
9087785727 => array:16 [▶]
]
我以稍微不同的方式创建另一个数组,array2:
array:2 [▼
"d8ab80f4f6" => array:3 [▶]
9087785727 => array:3 [▶]
]
现在我想合并这些数组:
$output = array_merge_recursive($array1,$array2);
输出是:
array:3 [▼
"d8ab80f4f6" => array:19 [▶]
0 => array:3 [▶]
1 => array:16 [▶]
]
但我希望输出是:
array:3 [▼
"d8ab80f4f6" => array:19 [▶]
"9087785727" => array:19 [▶]
]
解决方案
array_merge
并将array_merge_recursive
字符串键与数字键区别对待:
如果输入数组具有相同的字符串键,则将这些键的值合并到一个数组中,这是递归完成的,因此如果其中一个值是数组本身,则该函数会将其与相应的条目合并在另一个数组中。但是,如果数组具有相同的数字键,则后面的值不会覆盖原始值,而是会被追加。
这就是这里发生的事情。键9087785727
是数字,因此这些条目不会被合并。
所以你需要编写自己的循环。
$output = [];
foreach ($array1 as $key => $value) {
$output[$key] = array_merge($value, $array2[$key]);
}
推荐阅读
- python - 在 python 中过滤关于特定国家的推文
- pytorch - 在 TorchScript 中跟踪张量大小
- java - 在java中使用正则表达式从基于下划线的字符串中获取子字符串
- node.js - 管理nodejs多个超时会话
- django - 从另一个数据库获取数据并在 Django 中每隔几秒刷新一次的最佳方法
- mqtt - 如何将“共享属性”从 Thingsboard 发送到设备(RPC)?
- git - git merge-file dry-run / 检测是否可以通过自动冲突解决来合并具有共同祖先文件的 2 个文件
- r - Cross tabulation plot with numbers in R
- c++ - 从 std::vector 转换
到 std::vector 不犯重罪 - java - Playwright Java:示例返回错误:无法使字段 [..] 可访问