-3

我正在尝试将 JavaScript 转换为 php,但我不确定如何将JavaScript 函数下面Math.random()hexChars方法转换为 PHP,感谢您的帮助

JavaScript 函数:

    function generateId(){
        var a=[],b;
        a[8]=a[13]=a[18]=a[23]="-";
        a[14]="4";

        for(i=0;i<36;i++)
        if(!a[i]){
            b=0|Math.random()*16;
            a[i]=hexChars[i==19?b&3|8:b]
        }
        return a.join("")       
    }

到目前为止我转换的PHP 函数:

function generateId(){
    $a = array();
    $a[8]=$a[13]=$a[18]=$a[23]="-";
    $a[14]="4";
    for($i=0;$i<36;$i++){
        if(!$a[$i]){
        // not sure what to do here 
        }
    }
}

编辑:它将创建一个这样的字符串:902EA4DD-5445-4435-93F2-2A5203818255

4

3 回答 3

2

我假设这hexChars是一个十六进制字符数组。

<?php
    function generateId(){
        $hexChars = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F');
        $a = array();
        $a[8] = $a[13] = $a[18] = $a[23] = "-";
        $a[14] = "4";
        for ($i=0; $i < 36; $i++)
            if (!isset($a[$i]))
                $a[$i] = $hexChars[mt_rand(0,15)];
        ksort($a);
        return implode($a);
    }
    echo generateId();
?>

演示: http: //phpfiddle.org/main/code/je3-6zc

于 2012-11-20T08:42:12.217 回答
2

我会重做整个事情:

function generateId() {
    $id = md5(mt_rand());
    return substr($id, 0, 8) . '-' . substr($id, 9, 4) . '-' 
        . substr($id, 13, 4) . '-' . substr($id, 17, 4) . '-'
        . substr($id, 21, 4) . '-' . substr($id, 25);
}

如果您需要更多熵,您可以使用用于md5()函数的数据,但这应该可以帮助您入门。

于 2012-11-20T08:42:14.473 回答
2
b = 0|Math.random()*16;

返回一个从 0 到 15 的随机整数。等效的 PHP 代码是

$b = rand(0,15);

http://php.net/manual/en/function.rand.php


a[i]=hexChars[i==19?b&3|8:b]

hexChars 是一个数组。在 PHP 中,您可以使用数组表示法来索引字符串中的字符:

$hexChars = "0123456789ABCDEF"
于 2012-11-20T08:44:02.663 回答