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

如何对多维数组中的RESULT_VALUE求和并输出合并DESCR列表?

处理多维数组的RESULT_VALUE求和与DESCR列表合并

别慌,这种多层嵌套的数组确实容易让人头大,我来帮你拆解处理~先理清楚你的数组层级,再一步步实现求和和描述列表合并的需求。

先明确数组结构(基于你提供的片段补全)

你的数组大概是这样的PHP格式(方便后续代码示例):

$orders = [
    [
        'ORDER_ID' => 35,
        'DISCOUNT_ID' => 18,
        'ORDER_COUPON_ID' => 0,
        'COUPON_ID' => '',
        'RESULT' => [
            'BASKET' => [
                617 => [
                    'RULE_ID' => 248,
                    'APPLY' => 'Y',
                    'RULE_DESCR_ID' => 248,
                    'ACTION_BLOCK_LIST' => [0],
                    'DESCR_DATA' => [
                        [
                            'TYPE' => 2,
                            'VALUE' => 10,
                            'VALUE_TYPE' => 'P',
                            'VALUE_ACTION' => 'D',
                            'RESULT_VALUE' => 229.905,
                            'RESULT_UNIT' => 'RUB'
                        ]
                    ]
                ]
            ]
        ]
    ],
    // 第二个商品/折扣的数组结构类似
];

解决方案步骤

1. 初始化变量

先定义两个变量,分别存储RESULT_VALUE的总和,以及所有描述信息的列表:

$totalResultValue = 0.0;
$descrList = [];

2. 逐层遍历数组求和并收集描述

因为数组有多层嵌套,我们需要一层一层遍历,同时加入安全判断避免报错:

foreach ($orders as $order) {
    // 先检查当前订单是否有BASKET数据,没有就跳过
    if (!isset($order['RESULT']['BASKET']) || empty($order['RESULT']['BASKET'])) {
        continue;
    }
    
    // 遍历BASKET里的每个商品
    foreach ($order['RESULT']['BASKET'] as $item) {
        // 检查商品是否有DESCR_DATA,没有就跳过
        if (!isset($item['DESCR_DATA']) || empty($item['DESCR_DATA'])) {
            continue;
        }
        
        // 遍历每条折扣/价格描述数据
        foreach ($item['DESCR_DATA'] as $descrItem) {
            // 累加RESULT_VALUE,转成浮点型确保计算准确
            if (isset($descrItem['RESULT_VALUE'])) {
                $totalResultValue += (float)$descrItem['RESULT_VALUE'];
            }
            
            // 生成你需要的描述文本,格式可以根据需求调整
            $descrText = sprintf(
                "折扣规则:类型%d,折扣值%d%s,操作类型%s,最终金额%.2f %s",
                $descrItem['TYPE'],
                $descrItem['VALUE'],
                $descrItem['VALUE_TYPE'] === 'P' ? '%' : '', // P对应百分比
                $descrItem['VALUE_ACTION'] === 'D' ? '折扣' : '其他', // D对应折扣
                $descrItem['RESULT_VALUE'],
                $descrItem['RESULT_UNIT']
            );
            $descrList[] = $descrText;
        }
    }
}

3. 输出最终结果

最后把计算好的总和和描述列表输出:

// 输出总和,保留两位小数
echo "RESULT_VALUE总和:" . number_format($totalResultValue, 2) . " RUB\n";

// 输出合并后的描述列表
echo "\n合并后的DESCR列表:\n";
foreach ($descrList as $index => $descr) {
    echo ($index + 1) . ". " . $descr . "\n";
}

关键提示

  • 加入isset()和empty()判断是为了避免数组键不存在时触发报错,处理动态生成的数组时这一步很重要
  • 描述文本的格式可以完全根据你的需求修改,比如只提取VALUE和RESULT_VALUE等核心字段
  • 如果你的数组不是PHP格式,只需要把遍历逻辑转换成对应语言(比如Python的嵌套循环)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:14:39