如何基于ID值合并remarks与remark_asset数组并生成指定结构
解决PHP数组合并:将remarks与分组后的remark_asset转换为指定结构
嘿,我来帮你搞定这个数组合并的需求!根据你的描述,我们可以通过两步高效完成转换:先构建快速查找的映射表,再遍历生成目标结构。
步骤1:准备示例数据(模拟你的场景)
假设我们已有如下数据:
// 你的remarks数组(包含id和label) $remarks = [ ['id' => 1, 'label' => 'Txt L'], ['id' => 2, 'label' => 'Date Label'], ['id' => 3, 'label' => 'Cex'], ['id' => 4, 'label' => 'Label'], ]; // 已经按asset_id分组的remark_asset数组 $groupedRemarkAssets = [ 123 => [ // asset_id=123的分组 ['remark_id' => 1, 'value' => 'Txt Def'], ['remark_id' => 2, 'value' => '2019-12-10'], ['remark_id' => 3, 'value' => 'true'], ], 456 => [ // asset_id=456的分组(部分匹配) ['remark_id' => 4, 'value' => 'Some Value'], ], ];
步骤2:实现合并逻辑
如果只需要处理单个asset_id的分组:
// 指定要处理的asset_id $targetAssetId = 123; // 第一步:将对应asset_id的remark_asset转换为「remark_id => value」的映射表,提升查找效率 $remarkValueMap = []; foreach ($groupedRemarkAssets[$targetAssetId] ?? [] as $assetItem) { $remarkValueMap[$assetItem['remark_id']] = $assetItem['value']; } // 第二步:遍历remarks生成目标结构 $resultItem = []; foreach ($remarks as $remark) { // 用remark的label作为键,匹配到值就取,否则设为null $resultItem[$remark['label']] = $remarkValueMap[$remark['id']] ?? null; } // 最终结果数组 $result = [$resultItem]; // 输出结果:[{"Txt L": "Txt Def", "Date Label": "2019-12-10", "Cex": "true", "Label": null}] print_r(json_encode($result));
如果需要处理所有asset_id的分组,生成对应的结果数组:
$result = []; // 遍历每个asset_id的分组 foreach ($groupedRemarkAssets as $assetId => $assetItems) { // 构建当前asset分组的remark_id映射表 $remarkValueMap = []; foreach ($assetItems as $item) { $remarkValueMap[$item['remark_id']] = $item['value']; } // 生成当前asset对应的结果项 $currentItem = []; foreach ($remarks as $remark) { $currentItem[$remark['label']] = $remarkValueMap[$remark['id']] ?? null; } $result[] = $currentItem; } // 输出结果会包含每个asset_id对应的结构 print_r(json_encode($result));
逻辑说明
- 映射表优化:把remark_asset分组转换为以
remark_id为键的关联数组,这样后续查找匹配值的操作是O(1),比嵌套循环的O(n²)高效得多,数据量大的时候优势明显。 - 空值兜底:使用PHP7+的
??空合并运算符,当找不到匹配的remark_id时自动设为null,完全符合你的需求。 - 结构生成:遍历
remarks数组,用每个项的label作为结果的键,从映射表中取出对应的值,最终组装成你需要的数组结构。
内容的提问来源于stack exchange,提问作者Dendi Defianto
相关产品推荐
相关产品推荐

