在PHP中将“raw”字符串格式化为Java UUID

时间:2016-09-15 13:33:18

标签: java php json string curl

是否有更有效,简化的方法将“格式化的”Java UUID(无破折号)转换为Java兼容格式 - 使用破折号 - 在PHP中,最终:我该怎么做?

我的代码已经执行了此操作,但它似乎不专业,我觉得它可能会更有效地完成。

[... PHP code ...]
$uuido = $json['id'];

$uuidx = array();
$uuidx[0] = substr( $uuido, 0, 8 );
$uuidx[1] = substr( $uuido, 8, 4 );
$uuidx[2] = substr( $uuido, 12, 4);
$uuidx[3] = substr( $uuido, 16, 4);
$uuidx[4] = substr( $uuido, 20, 12);

$uuid = implode( "-", $uuidx );
[... PHP code ...]

Input:  f9e113324bd449809b98b0925eac3141
Output: f9e11332-4bd4-4980-9b98-b0925eac3141

来自$json['id']的数据来自以下Mojang Profile API使用file_get_contents( $url )函数与json_decode( $file )结合使用,也可以通过cURL完成 - 但是因为它会最终一次请求任何多达2048个配置文件,我认为它会变慢。

我的代码正在使用中,并通过以下ProjectRogue Server Ping API公开,通常包含在线播放器列表。

注意:有几个与此相关的问题,但据我所知,没有一个适用于PHP。我看了。

我提到Java UUID,因为解析后的输出应该有效地转换为Player UUID,以便在1.7.X之后用于Spigot或Craftbukkit的基于Java的插件。

2 个答案:

答案 0 :(得分:2)

UUID不是一种特殊的java格式。这是Universal Unique Identifier

  

通用唯一标识符(UUID)是软件构造中使用的标识符标准。 UUID只是一个128位值

从128位值转换为将其转换为字符串的相同值的人类可读版本通常遵循一些惯例。

基本上,这个数字被转换为更好的人类可读的十六进制格式,并带有一些连字符来分隔位块。

从性能角度来看,你可以使用substr_replace函数的几次,而不是使用substr创建一个字符串数组并对其应用implode。

答案 1 :(得分:2)

你的问题没有多大意义,但假设你想用Java中的正确格式读取UUID,你可以这样做:

import java.util.UUID;
class A
{
    public static void main(String[] args){


        String input = "f9e113324bd449809b98b0925eac3141";                         
        String uuid_parse = input.replaceAll(                                            
                        "(\\w{8})(\\w{4})(\\w{4})(\\w{4})(\\w{12})",                            
                        "$1-$2-$3-$4-$5");                                                      

        UUID uuid = UUID.fromString(uuid_parse);
        System.out.println(uuid);
    }
}
  

借用maerics,请看这里:https://stackoverflow.com/a/18987428/4195825

或者在PHP中,您可以执行以下操作:

<?php 
    $UUID = "f9e113324bd449809b98b0925eac3141";
    $UUID = substr($UUID, 0, 8) . '-' . substr($UUID, 8, 4) . '-' . substr($UUID, 12, 4) . '-' . substr($UUID, 16, 4)  . '-' . substr($UUID, 20);
    echo $UUID;
?>
  

借用fico7489:https://stackoverflow.com/a/33484855/4195825

然后您可以将其发送到Java,您可以使用fromtString()创建UUID对象。