0

PHP ヘルプ

次のようなさまざまな一連のコードがあります。

BT4YX***1
Eg:BT4DA1111
BT4YX**X1
Eg:BT4DA11A1
BT4Y**X*1
Eg:Bt4D22A21

コードの値を次のようにシャッフルしたい:

X=A,B,C,D,E
*=0 to 9

したがって、最終的にランダムなシリーズが選択され、シャッフル値がその選択されたシリーズに入れられ、最終的にこのようなコードが得られます

BT4DA11A1

これまでのところ、私はこのようなことをしました:

$series = array("BT4YXXXX1", "BT4Y**X*1", "BT4Y**X*1", "BT4YX**X1", "BT4YX***1");
$random_series = $series[ rand(0,(count($series)-1)) ];
echo $random_series;

ランダムなシリーズを取得することはできますが、X と * のランダムな値を入れることに固執しています

みんな助けてください

4

1 に答える 1

0
$series = array(
        'BT4YX***1',
        'BT4YX**X1',
        'BT4Y**X*1',
        'BT4YXXXX1',
    );

$result = preg_replace_callback(
    '/[X*]/',
    function ($matches) {
        switch($matches[0]) {
            case '*' : return range(0,9)[array_rand(range(0,9))];
            case 'X' : return range('A','E')[array_rand(range('A','E'))];
        }
    },
    $series
);

var_dump($result);

編集

PHP >= 5.4.0 が必要です。ただし、配列の逆参照をリファクタリングした場合は、5.3.0 以降で使用できます。

$series = array(
        'BT4YX***1',
        'BT4YX**X1',
        'BT4Y**X*1',
        'BT4YXXXX1',
    );

$result = preg_replace_callback(
    '/[X*]/',
    function ($matches) {
        switch($matches[0]) {
            case '*' : 
                $range = range(0,9);
                $rand = array_rand($range);
                return $range[$rand];
            case 'X' :
                $range = range('A','E');
                $rand = array_rand($range);
                return $range[$rand];
        }
    },
    $series
);

var_dump($result);
于 2013-08-10T22:01:21.867 に答える