php使用jsonStrToArray 的时候,需要把 generateUniqueKey 这个生成的key去掉

2024-05-23 148 0

你可以在 jsonStrToArray 方法中加入去除 generateUniqueKey 生成的唯一键的逻辑。为了实现这一点,我们可以假设唯一键是无序的,且每个键都是独特的。下面是改进后的两个方法:

方法:arrayToJson

这个方法会将指定键的数组值转换为 JSON 字符串,并且为每个数组元素分配一个唯一键:

function arrayToJson(array $array = [], array $keys = [], $level = 1)
{
    function generateUniqueKey()
    {
        return uniqid();
    }

    if ($level == 1) {
        foreach ($keys as $key) {
            if (isset($array[$key]) && is_array($array[$key])) {
                $formattedData = [];
                foreach ($array[$key] as $item) {
                    $uniqueKey = generateUniqueKey();
                    $formattedData[$uniqueKey] = $item;
                }
                $array[$key] = json_encode($formattedData, JSON_UNESCAPED_UNICODE);
            }
        }
    }
    return $array;
}

方法:jsonStrToArray

这个方法会将指定键的 JSON 字符串值转换回数组,并去除生成的唯一键:

function jsonStrToArray(array $array = [], array $keys = [], $level = 1)
{
    if ($level == 2) {
        foreach ($array as &$value) {
            foreach ($keys as $key) {
                if (isset($value[$key]) && is_string($value[$key])) {
                    $decodedArray = json_decode($value[$key], true);
                    if (is_array($decodedArray)) {
                        $value[$key] = array_values($decodedArray);
                    }
                }
            }
        }
        unset($value);
    } elseif ($level == 1) {
        foreach ($keys as $key) {
            if (isset($array[$key]) && is_string($array[$key])) {
                $decodedArray = json_decode($array[$key], true);
                if (is_array($decodedArray)) {
                    $array[$key] = array_values($decodedArray);
                }
            }
        }
    }
    return $array;
}

示例用法

假设你有一个包含数据的数组,并且你希望处理其中某些键:

$data = [
    "id" => 37,
    "category_id" => 2,
    "partner_id" => 2,
    "name" => "香港沙田服务器5型",
    "cpu" => [
        ["name" => "2xAMD EPYC 7302", "thread" => "32核心64线程", "price" => 0],
        ["name" => "2xAMD EPYC 7502", "thread" => "64核心128线程", "price" => 200]
    ],
    "ram" => [
        ["name" => "256G", "price" => 0],
        ["name" => "512G", "price" => 2450],
        ["name" => "1024G", "price" => 7200]
    ]
];

// 将数组转换为 JSON 字符串
$data = arrayToJson($data, ['cpu', 'ram'], 1);
print_r($data);

// 将 JSON 字符串转换回数组,并去除唯一键
$data = jsonStrToArray($data, ['cpu', 'ram'], 1);
print_r($data);

通过以上代码示例,你可以将指定键的数组值转换为 JSON 字符串,再将它们还原为数组并去除生成的唯一键。确保你根据具体需求调整方法的逻辑,例如处理更多嵌套层级或者不同的数据结构。

    相关文章

    php 取当月有多少天 然后返回整数的方法
    php计算两个日期之间相隔的天数
    在 ThinkPHP8 中,选择使用 findOrEmpty() 还是 find() 取决于你对结果处理的需求
    php移除不需要的数组
    php获取用户操作系统
    PHP国家及地区代码数组

    发布评论