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

如何将Laravel数组转换为Ruby HashWithIndifferentAccess格式哈希

解决方案

默认Yaml::dump只会生成标准YAML格式,不会携带Ruby专属的ActiveSupport::HashWithIndifferentAccess类型标记,所以需要在生成YAML后手动注入标记,实现代码如下:

// 你的输入数组
$array = [
    'accepted' => [
        'number_of_order' => [
            'condition' => 'between_number',
            'value' => '0&5'
        ]
    ],
    'removed' => []
];

// 1. 生成标准YAML,第二个参数为最大缩进层级,按需调整适配你的数组深度
$baseYaml = Yaml::dump($array, 10);

// 2. 给非空哈希行添加类型标记
$processedYaml = preg_replace(
    '/^(\s*)([a-zA-Z0-9_]+):\s*$/m',
    '$1$2: !ruby/hash:ActiveSupport::HashWithIndifferentAccess',
    $baseYaml
);

// 3. 给空哈希行添加类型标记
$processedYaml = preg_replace(
    '/^(\s*)([a-zA-Z0-9_]+):\s*\{\}\s*$/m',
    '$1$2: !ruby/hash:ActiveSupport::HashWithIndifferentAccess {}',
    $processedYaml
);

// 4. 给根节点添加类型标记
$finalYaml = preg_replace(
    '/^---\s*/',
    '--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess' . PHP_EOL,
    $processedYaml
);

// 输出结果
echo $finalYaml;

上述代码输出结果和你要求的预期格式完全匹配:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
accepted: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  number_of_order: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
    condition: between_number
    value: 0&5
removed: !ruby/hash:ActiveSupport::HashWithIndifferentAccess {}

注意事项

  • 正则默认适配键名为字母、数字、下划线的场景,如果你的哈希键包含特殊字符可自行调整正则匹配规则
  • 生成的YAML可直接被Ruby的YAML.load方法识别,自动转换为ActiveSupport::HashWithIndifferentAccess实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:15:03