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

如何基于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));

逻辑说明

  1. 映射表优化:把remark_asset分组转换为以remark_id为键的关联数组,这样后续查找匹配值的操作是O(1),比嵌套循环的O(n²)高效得多,数据量大的时候优势明显。
  2. 空值兜底:使用PHP7+的??空合并运算符,当找不到匹配的remark_id时自动设为null,完全符合你的需求。
  3. 结构生成:遍历remarks数组,用每个项的label作为结果的键,从映射表中取出对应的值,最终组装成你需要的数组结构。

内容的提问来源于stack exchange,提问作者Dendi Defianto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:23