随机电话号码xxx或yyy+;操作员编号mm或nn+;php中的随机6或7位数字

随机电话号码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',)

我需要代码来生成一个随机电话号码,如果它选择331前缀,那么它必须有2个操作员号码,如果它选择333,那么它必须包含5个操作员号码,最后是随机号码,但是如果是381,那么它是7位数字,如果是389,那么它是6位数字,我已经这样做了,但最后它不会打印出任何内容

<?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
。请参见此处的文档: