2012-01-30 34 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']; 

?> 
相关问题