1

文字列の最初と最後に新しいランダム文字を生成する次の関数があります。

function random($string) {

    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $shuffle_start = substr(str_shuffle($chars), 0, 6);
    $shuffle_end = substr(str_shuffle($chars), 0, 6);
    $str = chunk_split($string, 1, substr(str_shuffle($chars), 0, 5));

    return $shuffle_start . $str . $shuffle_end;

}

ご覧のとおり$str、文字列内の各文字の後に 5 つのランダムな文字を取得しようとしていますが、これには助けが必要です。現在のように、この関数はこれを出力します:

dYj9quhDk2T4eDk2T4lDk2T4lDk2T4oDk2T4KHjN6T

文字列は「hello」で、文字列の最初と最後にある 6 つのランダムな文字 (dYj9quKHjN6T) で覆われています。この文字列内の各文字のDk2T4後に、各文字の後に繰り返し返されていることがわかります。これは私が望む方法ではありません!ランダムにしたいDk2T4ので、文字列は次のようになります。

dYj9quhDk2T4eTft3bl7yjF4lac34vodkiY0KHjN6T

文字列から削除された文字列の最後の文字 (「hello」 - この場合dkiY0は最後の文字列) も必要なので、次のようになります。

dYj9quhDk2T4eTft3bl7yjF4lac34voKHjN6T

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

これは、 が 1 回だけchunk_split評価されるために発生substr(str_shuffle($chars), 0, 5)します。文字を反復して、それぞれのシーケンスを生成する必要があります。

function random($string) {

    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $shuffle_start = substr(str_shuffle($chars), 0, 6);
    $shuffle_end = substr(str_shuffle($chars), 0, 6);
    $letters = str_split($string);
    $str = '';
    $count = count($letters);
    foreach($letters as $l){
        $count--;
        $str .= $l;
        if($count){ // add 5 characters if not last letter
            $str .= substr(str_shuffle($chars), 0, 5);
        }
    }

    return $shuffle_start . $str . $shuffle_end;
}
于 2013-09-29T10:19:39.003 に答える