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

如何遍历多维数组,对匹配键的元素应用类型转换回调函数?

如何根据类型转换规则数组处理多维数据数组?

首先明确两个核心数组:

原始数据数组

$data = [
    "workflowStep" => null,
    "penalty" => 0.0,
    "order" => 0,
    "readMode" => true,
    "applyPenaltyTo101Only" => false,
    "writeMode" => true,
    "transMemory" => [
            'uid' => 'FS#GEHED',
            'items' => 12,
        ],
    "targetLocale" => "en_us",
];

类型转换规则数组

$rules = [
    "penalty" => 'float',
    "readMode" => 'bool',
    "transMemory" => [
            'uid' => 'string',
            'items' => 'int',
        ],
];

实现思路

因为数组是多维嵌套结构,需要递归遍历处理层级数据:只处理规则数组中存在对应键的元素,遇到嵌套规则时递归处理子数组,最终根据规则对值执行类型转换。

具体代码实现

function applyTypeConversion(&$data, $rules) {
    foreach ($rules as $key => $rule) {
        // 跳过数据中不存在的键
        if (!isset($data[$key])) {
            continue;
        }

        // 递归处理嵌套的子数组规则
        if (is_array($rule)) {
            applyTypeConversion($data[$key], $rule);
            continue;
        }

        // 按规则执行类型转换
        switch ($rule) {
            case 'int':
                $data[$key] = (int)$data[$key];
                break;
            case 'float':
                $data[$key] = (float)$data[$key];
                break;
            case 'bool':
                $data[$key] = (bool)$data[$key];
                break;
            case 'string':
                $data[$key] = (string)$data[$key];
                break;
            // 可根据需求扩展其他类型转换(如array、null等)
        }
    }
}

// 调用函数直接修改原数据数组
applyTypeConversion($data, $rules);

// 查看处理后的结果
print_r($data);

代码说明

  1. 使用引用传递&$data,直接修改原数组,无需额外返回值;
  2. 仅遍历规则数组的键,只处理数据中存在对应键的元素,避免无意义操作;
  3. 针对嵌套的规则数组,递归调用函数处理子层级数据;
  4. 通过switch分支处理不同类型的强制转换,可按需扩展更多类型支持。

内容的提问来源于stack exchange,提问作者Collin Ter Steege

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:36:13