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

含嵌套数组的JSON序列化及SHA256哈希生成实现问题

解决PHP序列化嵌套数组并生成SHA256哈希UUID的问题

问题核心

你现有的zoza函数直接用echo输出序列化内容,没法把结果存到变量里做哈希计算,而且函数返回的$names根本没定义,逻辑存在缺陷。

修改后的序列化函数

把输出改成字符串拼接,递归时收集子结果,最终返回完整的序列化字符串,这样就能存入变量后续使用:

function zoza($arr)
{
    $serialized = '';
    foreach ($arr as $key => $val) {
        // 按伪代码要求把键转成大写,包裹双引号
        $serialized .= '"' . strtoupper($key) . '"';
        if (is_array($val)) {
            // 递归处理嵌套数组,把子结果拼入主字符串
            $serialized .= zoza($val);
        } else {
            // 处理普通值,包裹双引号
            $serialized .= '"' . $val . '"';
        }
    }
    return $serialized;
}

生成收据UUID(SHA256哈希)

拿到序列化字符串后,直接用PHP的hash函数生成64位十六进制的SHA256哈希:

// 替换成你的实际收据数组
$maArray = [
    'Receipt' => [
        'Id' => 'R20240501',
        'Amount' => '150',
        'Items' => [
            ['Product' => 'Laptop', 'Price' => '120'],
            ['Product' => 'Mouse', 'Price' => '30']
        ]
    ]
];

// 获取序列化后的单行文本
$serializedStr = zoza($maArray);

// 生成64字符的十六进制SHA256哈希作为UUID
$receiptUuid = hash('sha256', $serializedStr);

// 测试输出
echo "序列化内容:" . $serializedStr . PHP_EOL;
echo "收据UUID:" . $receiptUuid . PHP_EOL;

关键改动说明

  1. 移除所有echo输出,改用$serialized变量拼接内容,确保结果可存入变量
  2. 修复原函数返回未定义变量的问题,直接返回完整的序列化字符串
  3. 严格遵循你提供的伪代码要求,将所有键转换为大写(使用strtoupper($key))
  4. 递归处理嵌套数组时,将子数组的序列化结果拼接到主字符串,完全符合序列化规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:05:33