-3

JavaScript を php に変換しようとしていますが、以下の JavaScript 関数を PHP に変換Math.random()してhexCharsメソッド化する方法がわかりません。助けてくれてありがとう

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
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 に答える
2

hexCharsは16進文字の配列であると想定しています。

<?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 に答える