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和*的随机值
请帮帮我伙计们
发布于 2013-08-11 06:01:22
$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);https://stackoverflow.com/questions/18166665
复制相似问题