PHP中的rand函數(shù)是眾所周知的生成隨機(jī)整數(shù)的函數(shù),但是對(duì)于一些程序員來說,在使用rand函數(shù)生成隨機(jī)數(shù)時(shí),卻不清楚rand函數(shù)是否可以生成負(fù)數(shù)。放心,rand函數(shù)可以生成負(fù)數(shù)。下面我們就來詳細(xì)介紹一下PHP中rand函數(shù)生成負(fù)數(shù)的方法。
和生成正數(shù)一樣,PHP中的rand函數(shù)也是生成有限的隨機(jī)數(shù),只不過可以通過指定參數(shù)來限制隨機(jī)數(shù)的范圍。當(dāng)我們沒有設(shè)置參數(shù)時(shí),PHP中的rand函數(shù)將隨機(jī)生成任意正整數(shù)。如果想要生成負(fù)數(shù)呢?可以使用負(fù)數(shù)的上限和下限作為參數(shù)的值,如下所示:
$min = -100; // 設(shè)置下限為 -100 $max = -1; // 設(shè)置上限為 -1 $num = rand($min, $max); echo $num;
代碼中,設(shè)置了一個(gè)區(qū)間,下限為-100,上限為-1,然后用rand函數(shù)隨機(jī)選擇這個(gè)區(qū)間內(nèi)的整數(shù)作為$num并輸出。運(yùn)行結(jié)果可能是-78、-3、-95……等等負(fù)數(shù)。
但是需要注意的是,rand函數(shù)生成的負(fù)數(shù)與生成的正數(shù)一樣是有限的,它只會(huì)在指定區(qū)間內(nèi)生成隨機(jī)數(shù)。如果我們將區(qū)間從負(fù)數(shù)擴(kuò)大到正數(shù),生成的負(fù)數(shù)所占比例就會(huì)相應(yīng)地減少。舉個(gè)例子,如果設(shè)置區(qū)間為-100到100,當(dāng)rand函數(shù)生成0時(shí),從-100到0的數(shù)和從0到100的數(shù)的可能性是一樣的,所以$ num等于0的概率是相等的。
不過在實(shí)際應(yīng)用中,如果我們要生成負(fù)整數(shù),可以使用下面的方法:
$num = mt_rand(0, mt_getrandmax()) * (mt_rand(0, 1) ? 1 : -1); echo $num;
這種方法是使用mt_rand()函數(shù)生成一個(gè)介于0和mt_getrandmax()之間的隨機(jī)整數(shù),然后將它乘以隨機(jī)生成的1或-1,通過這種方式實(shí)現(xiàn)生成正負(fù)隨機(jī)數(shù)的目的。
總的來說,PHP中的rand函數(shù)是可以生成負(fù)數(shù)的,只需要設(shè)置一個(gè)負(fù)數(shù)的上限和下限就可以生成指定范圍內(nèi)的負(fù)隨機(jī)數(shù)。