2014-01-15 89 views
0

我需要輸出一個包含10個字母數字/下劃線字符的隨機字符串,其中第一個字符不能是數字。我的代碼如下:我的循環和array_rand()的代碼有什麼問題?

$arr = array_merge(range("a", "z"), range("A", "Z"), array("_")); 
$name = array_rand($arr); 
$arr = array_merge($arr, range(0, 9)); 
    for($i = 1; $i < 10; $i++) 
    { 
    $name .= array_rand($arr); 
    } 
echo $name; 

但輸出是相當奇怪的是,總有一些像332932396004711393793325531872538101348212116303047152448。爲什麼它超過十個字符,爲什麼它以數字開頭(儘管當我啓動變量$name時,$arr內部沒有數字)?我應該使用foreach而不是for循環嗎?或者我應該使用array_rand()以外的其他功能?我只是PHP的初學者,所以很抱歉這個愚蠢的問題。並提前感謝大家。

+0

'foreach'和'for'循環不會對輸出差。它們只是不同的循環流程。此外,'array_ran()'返回數組鍵值,而不是值。 – Raptor

回答

3

array_rand返回一個隨機數組的鍵,而不是一個隨機數組項。更多信息可以在這裏找到:http://www.php.net/manual/en/function.array-rand.php

我已經糾正代碼:

$arr = array_merge(range("a", "z"), range("A", "Z"), array("_")); 
$name = $arr[array_rand($arr)]; 
$arr = array_merge($arr, range(0, 9)); 
    for($i = 1; $i < 10; $i++) 
    { 
    $name .= $arr[array_rand($arr)]; 
    } 
echo $name; 

輸出例如:

NQvCKSkyym 
+0

它工作完美...謝謝你:-) – user3194824

0

這樣做.. array_rand()只返回您陣列中的隨機密鑰。你需要在數組中獲取隨機元素。

<?php 
$arr = array_merge(range("a", "z"), range("A", "Z"), array("_")); 
$arr = array_merge($arr, range(0, 9)); 
    for($i = 1; $i < 10; $i++) 
    { 
    //$name .= array_rand($arr); 
    $key = array_rand($arr); 
    $name .=$arr[$key]; 
    } 
echo $name; 

OUTPUT:

5Ts9hz7NZ5 
+0

我測試了你的代碼...輸出總是以數字開頭,通常超過10個字符。 – user3194824

+0

用echo substr替換'echo $ name;'(strrev($ name),1);' –

+0

這並不能解決問題。問題是第2行上的array_rand正在返回需要更正的數組鍵,而不是數組條目。 – anthonygore