2012-01-30 105 views
3

我試圖根據數字來聲明一個變量。大於x且小於y php不起作用

我想要做「如果$ var小於[amount]並且大於[amount] var = blah elseif $ var小於[amount]並且大於[amount] var = blah」等等這裏是我的代碼:

$randomNumber = rand(1, $funnyPicsHigh); 

if($randomNumber > 0 && $randomNumber < 2001){ 
$directory_to_use = 1; 

}elseif($randomNumber > 2000 && $randomNumber < 4001){ 
$directory_to_use = 2; 

}elseif($randomNumber > 4000 && $randomNumber < 6001){ 
$directory_to_use = 3; 

}elseif($randomNumber > 6000 && $randomNumber < 8001){ 
$directory_to_use = 4; 

}elseif($randomNumber > 8000 && $randomNumber < 10001){ 
$directory_to_use = 5; 

}elseif($randomNumber > 10000 && $randomNumber < 12001){ 
$directory_to_use = 6; 

}elseif($randomNumber > 10000 && $randomNumber < 12001){ 
$directory_to_use = 7; 

}elseif($randomNumber > 12000 && $randomNumber < 14001){ 
$directory_to_use = 8; 

}elseif($randomNumber > 14000 && $randomNumber < 16001){ 
$directory_to_use = 9; 

}elseif($randomNumber > 16000 && $randomNumber < 18001){ 
$directory_to_use = 10; 

}elseif($randomNumber > 18000 && $randomNumber < 20001){ 
$directory_to_use = 11; 

} 

我開始使用的,如果再ELSEIF的一切,我再改它,所以它是> =和< =,依然沒有之前和之後的工作,然後我試圖把「」我現在看到的數字仍然沒有奏效。

隨機數執行得很好,但它似乎選擇一個隨機目錄。我將刷新頁面,併爲該目錄選擇5。我再次刷新它,並選擇1,然後選擇1,然後選擇3.它似乎只是隨機選擇一個數字。

我在做什麼錯?


把它出來了,謝謝大家。這是由於我的邏輯不是所提供的代碼。大聲說出來試圖解釋我的問題是什麼幫助我如此感謝。如果想運行的代碼是什麼,它在這裏: http://pastebin.com/en2sc3HC

+1

爲什麼你需要圍繞數字引號? – Cheery 2012-01-30 05:28:45

+0

由於rand()返回一個int,所以不需要引號。 – Dawood 2012-01-30 05:29:35

+0

我不這樣做,如果你閱讀我的文章,我說我原本沒有報價,但感覺沒有工作我試圖添加引號,看看我的整數是字符串還是其他方式。我試了兩次,都沒有工作。 – Travis 2012-01-30 05:30:14

回答

12

你的代碼可以顯著簡化

$directory_to_use = ceil(rand(1, $funnyPicsHigh)/2000); 

,如果這是一個錯字

}elseif($randomNumber > 10000 && $randomNumber < 12001){ 
$directory_to_use = 6; 

}elseif($randomNumber > 10000 && $randomNumber < 12001){ 
$directory_to_use = 7; 
+1

+1對於OPs問題更簡單的方法 – nickb 2012-01-30 05:40:54

+0

事實上,或者使用'ceil()代替floor()'並且丟棄'+ 1' – 2012-01-30 05:41:22

+0

@fireeyedboy謝謝)我正在考慮這個問題,但是OP的輸入錯誤讓我困惑(我試圖找出最後一個數字有什麼問題),這就是爲什麼我忘記用ceil重寫。我會修復它:) – Cheery 2012-01-30 05:43:18

0

我跑你的代碼,不被在一個循環中循環100次,並在最後聲明如下:

echo nl2br("Number: {$randomNumber} \r\n"); 
echo nl2br("Directory: {$directory_to_use} \r\n"); 

,得到了這樣的輸出:

Number: 19984 
Directory: 11 

Number: 16677 
Directory: 10 

Number: 12097 
Directory: 8 

Number: 1
Directory: 6 

Number: 8341 
Directory: 5 

Number: 18832 
Directory: 11 

Number: 13325 
Directory: 8 

Number: 5228 
Directory: 3 

Number: 11034 
Directory: 6 

Number: 3605 
Directory: 2 

Number: 19827 
Directory: 11 

總之,你的代碼工作正常。

+0

PS - 由於櫻桃指出的錯誤,您的代碼不會將$ directory_to_use設置爲7 – xbonez 2012-01-30 05:43:02

0

從PHP docs

如果你比較多個具有一個字符串或比較涉及 數字串,則每一個字符串被轉換爲數字和數值進行 比較。

因此,在數字文字周圍使用引號應該不成問題。繼續..

隨機數執行得很好......似乎只是隨機選擇一個數字。我究竟做錯了什麼?

......什麼都沒有!如果它每次刷新頁面時都會隨機更改,則必須每次運行rand()。如果您希望刷新頁面後目錄仍然存在,請考慮將其存儲在會話變量中,檢查它是否在頁面加載時設置,如果是,則不要重新生成它。將這個想法與@ cheery's結合:

<?php 

    session_start(); 

    // store random directory in a session var if not set 
    if (!$_SESSION['randir']) { 
     $_SESSION['randir'] = ceil(rand(1, $funnyPicsHigh)/2000); 
    } 
    $directory_to_use = $_SESSION['randir']; 

?>