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

PHP实现多维数组相同price_components项的restrictions数组合并

问题原因

  • 原有代码每次遍历都会向结果数组新增一条元素,仅对当前新增元素做合并操作,没有过滤重复的price_components条目,最终只会生成带合并后restrictions的重复条目,无法实现去重合并的效果。
  • 未处理没有restrictions字段的FLAT、ENERGY类型条目,按你给出的预期结果你需要过滤这两类只保留PARKING_TIME类型,若有保留需求可以调整判断逻辑。

解决代码

// 临时数组用price_components的唯一标识做key,方便匹配
$temp = [];
foreach ($resultOCPI["elements"] as $element) {
    $pc = $element['price_components'];
    // 只处理PARKING_TIME类型,若需要保留所有类型可删掉这个if判断
    if ($pc['type'] !== 'PARKING_TIME') {
        continue;
    }
    // 生成唯一key:用price_components的三个字段拼接,保证完全匹配才会合并
    $key = $pc['type'] . '|' . $pc['price'] . '|' . $pc['step_size'];
    if (!isset($temp[$key])) {
        // 第一次遇到该price_components,直接初始化
        $temp[$key] = $element;
    } else {
        // 已存在同规则条目,合并day_of_week数组
        $temp[$key]['restrictions']['day_of_week'] = array_merge(
            $temp[$key]['restrictions']['day_of_week'],
            $element['restrictions']['day_of_week']
        );
    }
}
// 转成数字索引数组即得到最终结果
$resultOCPITest["elements"] = array_values($temp);

运行验证

执行上述代码后$resultOCPITest["elements"]的输出和你给出的预期结果完全一致。如果需要保留FLAT、ENERGY类型的原始条目,删除代码中过滤PARKING_TIME的if判断即可,代码会自动保留这两类条目(无restrictions字段不会触发合并逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:04