格式“raw"字符串到PHP中的Java UUID


Format "raw" string to Java UUID in PHP

是否有一种更有效、更简化的方法,可以在PHP中将"格式化"的Java UUID(不带破折号)转换为Java兼容的格式(带破折号),最终:我该如何做?

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

[... 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']的数据是使用file_get_contents( $url )函数结合json_decode( $file )从以下Mojang配置文件API调用的,这可以通过cURL来完成-但由于它最终会一次请求多达2048个配置文件,我认为它会变得很慢。

我确实有我的代码在使用,并且通过以下ProjectRogue服务器Ping API公开,它通常包含在线玩家列表。

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

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

你的问题没有多大意义,但假设你想在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);
    }
}

借用自maics,参见: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对象。

UUID不是特殊的java格式。是通用唯一标识符。

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

实际情况是,从128位值转换为人类可读的相同值的版本,将其转换为字符串通常遵循一些约定。

基本上这个数字被转换成更好的人类可读的十六进制格式,用一些连字符来分隔比特块。


从性能的角度来看,您可以多次使用substr_replace函数,而不是使用substr创建字符串数组并对其应用内爆。