随机电话号码xxx或yyy+;操作员编号mm或nn+;php中的随机6或7位数字
我需要代码来生成一个随机电话号码,如果它选择331前缀,那么它必须有2个操作员号码,如果它选择333,那么它必须包含5个操作员号码,最后是随机号码,但是如果是381,那么它是7位数字,如果是389,那么它是6位数字,我已经这样做了,但最后它不会打印出任何内容随机电话号码xxx或yyy+;操作员编号mm或nn+;php中的随机6或7位数字,php,Php,我需要代码来生成一个随机电话号码,如果它选择331前缀,那么它必须有2个操作员号码,如果它选择333,那么它必须包含5个操作员号码,最后是随机号码,但是如果是381,那么它是7位数字,如果是389,那么它是6位数字,我已经这样做了,但最后它不会打印出任何内容 <?php //an array containing the prefixes $string_preprefix = array('a' => '331', 'b' => '333',)
<?php
//an array containing the prefixes
$string_preprefix = array('a' => '331', 'b' => '333',);
shuffle($string_preprefix);
reset($string_preprefix);
an array containing the operator numbers for the 389 prefix
$string_prefix = array('20', '22', '23', '24', '26', '28', '29',);
shuffle($string_prefix);
reset($string_prefix);
//an array containing the operator numbers for the 381 prefix
$string_prefix = array('53', '54', '55', );
shuffle($string_prefix);
reset($string_prefix);
//a function that generates random number
function generateRandomNumber($length = 6) {
$number = '1234567890';
$numberLength = strlen($number);
$randomNumber = '';
for ($i = 0; $i < $length; $i++) {
$randomNumber .= $number[rand(0, $numberLength - 1)];
}
return $randomNumber;
}
//the if/elseif method doesn't print anything
if ($string_preprefix == ['a']):
echo $string_preprefix . $string_prefix . generateRandomNumber(6);
elseif($string_preprefix == ['b']):
echo $string_preprefix . $string_prefix . generateRandomNumber(7);
endif;
?>
您有几个问题。首先,如果在回显阵列之前重置阵列,每次都会得到相同的结果
接下来,您需要根据字符串测试数组第一个位置元素的大小,如'a'
,而不是['a']
,因为第二个示例将永远不会匹配,除非您的键中有括号
最后,您必须将元素返回到任何后续已被洗牌的数组的第一个位置。您有两个同名的数组,$string\u prefix
——第二个数组覆盖第一个数组。您需要额外的逻辑来做出决策:
//an array containing the prefixes
$string_preprefix = array('a' => '331', 'b' => '333',);
shuffle($string_preprefix);
//reset($string_preprefix);
if('389' == $string_preprefix[0]) { // this value is not in the original array
//an array containing the operator numbers for the 389 prefix
$string_prefix = array('20', '22', '23', '24', '26', '28', '29',);
shuffle($string_prefix);
//reset($string_prefix);
} elseif ('381' == $string_preprefix[0]) { // this value is not in the original array
//an array containing the operator numbers for the 381 prefix
$string_prefix = array('53', '54', '55', );
shuffle($string_prefix);
//reset($string_prefix);
} else {
$string_prefix = '0000';
}
//a function that generates random number
function generateRandomNumber($length = 6) {
$number = '1234567890';
$numberLength = strlen($number);
$randomNumber = '';
for ($i = 0; $i < $length; $i++) {
$randomNumber .= $number[rand(0, $numberLength - 1)];
}
return $randomNumber;
}
//the if/elseif method doesn't print anything
if (key($string_preprefix) == 'a'):
echo $string_preprefix[0] . $string_prefix[0] . generateRandomNumber(6);
elseif(key($string_preprefix) == 'b'):
echo $string_preprefix[0] . $string_prefix[0] . generateRandomNumber(7);
endif;
//包含前缀的数组
$string_preprefix=array('a'=>'331','b'=>'333',);
洗牌($string_preprefix);
//重置($string_preprefix);
如果('389'=$string_preprefix[0]){//此值不在原始数组中
//包含389前缀的运算符编号的数组
$string_prefix=数组('20','22','23','24','26','28','29',);
洗牌($string_前缀);
//重置($string_前缀);
}elseif('381'=$string_preprefefix[0]){//此值不在原始数组中
//包含381前缀的运算符编号的数组
$string_prefix=数组('53','54','55',);
洗牌($string_前缀);
//重置($string_前缀);
}否则{
$string_前缀='0000';
}
//生成随机数的函数
函数生成器域名($length=6){
$number='1234567890';
$numberLength=strlen($number);
$randomNumber='';
对于($i=0;$i<$length;$i++){
$randomNumber.=$number[rand(0,$numberLength-1)];
}
返回$randomNumber;
}
//if/elseif方法不打印任何内容
如果(键($string_preprefix)='a'):
echo$string_preprefix[0]$字符串前缀[0]。生成域编号(6);
elseif(键($string_preprefix)==“b”):
echo$string_preprefix[0]$字符串前缀[0]。生成域编号(7);
endif;
此外,我同意@IanDrake的评论-shuffle()
可能不会做你想做的事。您需要对数组执行随机化。打开后立即将错误报告添加到文件顶部我认为shuffle()
和reset()
函数不能满足您的需要。按照您现在的方式,$string\u preprefix
永远不会等于您正在检查的['a']
或['b']
。您可能希望使用数组\u rand()
分配$string\u preprefix
。请参见此处的文档: