2015-09-25 30 views
1

我需要代碼來生成一個隨機電話號碼,如果它選擇了331前綴,那麼它必須有2x運算符數字,如果它選擇333,那麼它必須包含5x操作符號碼,最後是隨機數字,但是如果它是381,那麼它是7位數字,如果它是389,則是6位數字我已經這樣做了,但是在結束它不打印任何東西。隨機電話號碼xxx或yyy +運營商號碼mm或nn +隨機6或7位數字在php中

<?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; 
     ?> 
+0

在打開'<?php'標記error_reporting(E_ALL)後立即在文件頂部添加錯誤報告; ini_set('display_errors',1);'有幾個問題,除非有複製粘貼錯誤。 –

+1

我不認爲'shuffle()'和'reset()'函數可以做你想要的。現在你已經擁有它了,'$ string_preprefix'永遠不會等於你正在檢查的'['a']'或'['b']'。你可能想用'array_rand()'來分配'$ string_preprefix'。在這裏看到文檔:http://php.net/manual/en/function.array-rand.php –

回答

2

你有幾個問題。首先,如果您在之前重置陣列,那麼您將回顯它們,每次都會得到相同的結果。

接下來,你需要測試的元素的key在對一個字符串數組的第一個位置,就像'a',不['a']作爲第二個例子將不會匹配,除非你的鑰匙有括號它。

最後,你必須返回任何後續數組已被混洗的第一個位置的元素。你有兩個同名的數組,$string_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; 

此外,我與@ IanDrake的評論表示贊同 - shuffle()可能不會做你想做的。你會想要執行數組的隨機化。