㈠ php中函數rand和mt_rand的區別比較
PHP函數rand和mt_rand
mt_rand()
比rand()
快四倍
很多老的
libc
的隨機數發生器具有一些不確定和未知的特性而且很慢。PHP
的
rand()
函數默認使用
libc
隨機數發生器。mt_rand()
函數是非正式用來替換它的。該函數用了
Mersenne
Twister
中已知的特性作為隨機數發生器,mt_rand()
可以產生隨機數值的平均速度比
libc
提供的
rand()
快四倍。
mt_rand()
比rand()
快四倍
mt_rand
—
生成更好的隨機數
(PHP
3
>=
3.0.6,
PHP
4,
PHP
5)
int
mt_rand
(
[int
min,
int
max]
)
很多老的
libc
的隨機數發生器具有一些不確定和未知的特性而且很慢。PHP
的
rand()
函數默認使用
libc
隨機數發生器。mt_rand()
函數是非正式用來替換它的。該函數用了
Mersenne
Twister(馬其塞旋轉)
中已知的特性作為隨機數發生器,它可以產生隨機數值的平均速度比
libc
提供的
rand()
快四倍。
如果沒有提供可選參數
min
和
max,mt_rand()
返回
0
到
RAND_MAX
之間的偽隨機數。
例如想要
5
到
15(包括
5
和
15)之間的隨機數,用
mt_rand(5,
15)。
注:
自
PHP
4.2.0
起,不再需要用
srand()
或
mt_srand()
函數給隨機數生成器播種,現已自動完成。
rand
—
產生一個隨機整數
(PHP
3,
PHP
4,
PHP
5)
int
rand
(
[int
min,
int
max]
)
如果沒有提供可選參數
min
和
max,rand()
返回
0
到
RAND_MAX
之間的偽隨機整數。例如想要
5
到
15(包括
5
和
15)之間的隨機數,用
rand(5,
15)。
注:
在某些平台下(例如
Windows)RAND_MAX
只有
32768。如果需要的范圍大於
32768,那麼指定
min
和
max
參數就可以生成大於
RAND_MAX的數了,或者考慮用
mt_rand()
來替代之。
注:
自
PHP
4.2.0
起,不再需要用
srand()
或
mt_srand()
函數給隨機數生成器播種,現已自動完成。
mt_rand定義和用法
mt_rand()
使用
Mersenne
Twister
演算法返回隨機整數。
語法
mt_rand(min,max)說明
如果沒有提供可選參數
min
和
max,mt_rand()
返回
0
到
RAND_MAX
之間的偽隨機數。例如想要
5
到
15(包括
5
和
15)之間的隨機數,用
mt_rand(5,
15)。
很多老的
libc
的隨機數發生器具有一些不確定和未知的特性而且很慢。PHP
的
rand()
函數默認使用
libc
隨機數發生器。mt_rand()
函數是非正式用來替換它的。該函數用了
Mersenne
Twister
中已知的特性作為隨機數發生器,它可以產生隨機數值的平均速度比
libc
提供的
rand()
快四倍。
提示和注釋
注釋:自
PHP
4.2.0
起,不再需要用
srand()
或
mt_srand()
函數給隨機數發生器播種,現在已自動完成。
注釋:在
3.0.7
之前的版本中,max
的含義是
range
。要在這些版本中得到和上例相同
5
到
15
的隨機數,簡短的例子是
mt_rand
(5,
11)。
例子
在本例中,我們會返回一些隨機數:
復制代碼
代碼如下:
<?php
echo(mt_rand());
echo(mt_rand());
echo(mt_rand(10,100));
?>
輸出類似:
3150906288
513289678
35
㈡ PHP函數mysql_affected_rows()與mysql_num_rows()有什麼區別
這兩個函數功能完全不同:
mysql_affected_rows 取得前一次 MySQL 操作所影響的記錄行數,操作是指INSERT、UPDATE、DELETE等,影響是指修改、變化的。如果函數失敗,返回值是-1。此函數參數為連接ID,也可以不要參數(當前默認的連接)。
mysql_num_rows()返回結果集中行的數目,僅對 SELECT 語句有效。注意其參數是mysql_query返回的結果集ID。
㈢ php獲取IP地址的三個函數區別
以下資料供參考:
1、REMOTE_ADDR 瀏覽當前頁面的用戶計算機的ip地址
2、HTTP_X_FORWARDED_FOR 瀏覽當前頁面的用戶計算機的網關
3.HTTP_CLIENT_IP 客戶端的ip
在PHP 中使用 REMOTE_ADDR 來取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。
要想透過代理伺服器取得客戶端的真實 IP 地址,就要使用 HTTP_X_FORWARDED_FOR 來讀取。
不過要注意的事,並不是每個代理伺服器都能用 HTTP_X_FORWARDED_FOR 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理伺服器的 IP。
還有一點需要注意的是:如果客戶端沒有通過代理伺服器來訪問,那麼HTTP_X_FORWARDED_FOR 取到的值將是空的。
㈣ php echo()和print()、require()和include()函數區別說明
1.echo和print的區別
PHP中echo和print的功能基本相同(輸出),但是兩者之間還是有細微差別的。echo輸出後沒有返回值,但print有返回值,當其執行失敗時返回flase。因此可以作為一個普通函數來使用,例如執行下面的代碼後變數$r的值將為1。
$r
=
print
「Hello
World」;
這意味著print可用在一些復雜的表達式中,而echo則不行。但是,因為echo語句不要求返回任何數值,所已在代碼中echo語句的運行效率要略微快於print語句。
2.include與require的區別
include()與require()的功能也基本相同(包含),但在用法上也有一些不同,include()是有條件包含函數,而require()則是無條件包含函數。例如在下面代碼中,如果變數$a為真,則將包含文件a.php:
if($a){
include(「a.php」);
}
而require()則和include()不同,不管$a取何值,下面的代碼將把文件a.php包含進文件里:
if($a){
require(「a.php」);
}
在錯誤處理方面,使用include語句,如果發生包含錯誤,程序將跳過include語句,雖然會顯示錯誤信息但是程序還是會繼續執行!但requre卻會給你來個致命錯誤。
當然,從字面意思上我們也可以理解七分:requre是很強硬的請求、要求的意思。
3.require_once()和include_once()語句
題外話了,因為長的像,簡單require_once()和include_once()語句分別對應於require()和include()語句。require_once()
和include_once()語句主要用於需要包含多個文件時,可以有效地避免把同一段代碼包含進去而出現函數或變數重復定義的錯誤。
4.空字元串(」)和NULL的區別
PHP中空字元串和NULL都是以值為0存儲的,但是他們的類型並不一樣,你可以試一下echo
gettype(」);和echo
gettype(NULL);你會發現他們列印出來的分別是string和NULL,當然還有0也容易混淆,你可以試試echo
gettype(0);列印一下類型,會發現0的類型是integer(整型),可見字元串(」)、NULL和0是「等值」但不等類型。
5.isset和
empty的區別
從字面意思上我們就可以明白:empty是判斷一個變數是否為「空」,而isset
則是判斷一個變數是否已經設置。但是這里有一點絕對要注意起來:當一個變數值為0,empty
認為這個變數同等於空,即相當於沒有設置。比如當我們檢測$id
變數的時候,當$id=0
,用empty和isset來檢測變數$id是否已經配置,兩都將返回不同的值:empty
認為沒有配置,isset
則能夠取得
$id
的值,看下邊例子:
$id=0;
emptyempty($id)?print
「我是空的」:print
「我是$id
.」;
//結果:我是空的
!isset($id)?print
「我是空的」:print
「我是$id
.」;//結果:我是0
6.==(等)和===(恆等)的區別
回顧上面第四條空字元串(「」)和NULL的區別,再來看一個例子:
」
==
NULL;
」
===
NULL;
運行之後你會發現第一個為true,而第二個則為false!可見==只是比較值是否相等,而===則不但比較值,還會比較類型,更為嚴格。