为了将每个数组元素添加唯一键并转换为JSON格式,可以改写你的arrayToJson
函数,使其遍历每个指定的键,并为每个元素生成一个唯一的主键。以下是如何实现这个功能:
function generateUniqueKey() {
return bin2hex(random_bytes(8)); // 生成16位的随机字符串
}
function arrayToJson(array $array = [], array $keys = [], $level = 1) {
dump($array);
dump($keys);
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);
dump($array);
}
}
return $array;
}
}
// 示例数据
$data = [
'cpu' => [
[
"name" => "2xAMD EPYC 7302",
"thread" => "32核心64线程",
"price" => 0
],
[
"name" => "2xAMD EPYC 7502",
"thread" => "64核心128线程",
"price" => 22000
]
],
'otherKey' => [
// 其他数据
]
];
$keys = ['cpu'];
$formattedData = arrayToJson($data, $keys);
dump($formattedData);
// 这个函数将 `cpu` 字段中的每个元素添加一个唯一键,并将其转换为 JSON 格式。
详细解释
- 生成唯一键:
function generateUniqueKey() { return bin2hex(random_bytes(8)); // 生成16位的随机字符串 }
- 使用
random_bytes
生成随机字节,并使用bin2hex
将其转换为十六进制字符串,以生成唯一键。 - 修改
arrayToJson
函数:function arrayToJson(array $array = [], array $keys = [], $level = 1) { dump($array); dump($keys); 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); dump($array); } } return $array; } }
- 遍历指定的键 (
$keys
数组)。 - 检查键对应的值是否存在并且是数组。
- 为每个元素生成一个唯一键,并构建新的关联数组。
- 将新数组编码为 JSON 字符串并替换原来的值。
- 遍历指定的键 (
- 示例数据和调用:
$data = [ 'cpu' => [ [ "name" => "2xAMD EPYC 7302", "thread" => "32核心64线程", "price" => 0 ], [ "name" => "2xAMD EPYC 7502", "thread" => "64核心128线程", "price" => 22000 ] ], 'otherKey' => [ // 其他数据 ] ]; $keys = ['cpu']; $formattedData = arrayToJson($data, $keys); dump($formattedData);
通过这种方式,你可以确保指定键中的每个元素都有一个唯一的主键,并且整个数据结构被正确转换为 JSON 格式。
这个示例展示了如何使用修改后的
arrayToJson
函数将cpu
字段中的每个元素添加唯一键并转换为 JSON 格式。