PHP常用函數和常見疑難問題解答_php技巧

來源:互聯網
上載者:User

首先介紹下比較簡單但必不可少且實用的知識,可以當手冊查詢,適合像我一樣的新手看。

PHP常用庫函數介紹

一、PHP字串操作常用函數
1.確定字串長度
int strlen(string str)
2.比較兩個字串
a. strcmp函數對兩個字串進行二進位安全的比較,並區分大小寫
int strcmp(string str1,string str2)
b. 以不區分大小寫方式比較兩個字串
int strcasecmp(string str1,string str2)

3.求兩個字串相同部分
int strspn(string str1,string str2)
4.求兩個字串的不同部分
5.int strcspn(string str1,string str2)
6.處理字串大小寫
a. 將字串全部轉換為小寫
string strtolower(string str)
b. 將字串全部轉化為大寫
string strtoupper(string str)
c. 將字串第一個字元大寫
string ucfirst(string str)
d. 把字串中每個單詞的首字元轉換為大寫
string ucwords(string str)
7.字串與HTML相互轉換
a. 將分行符號轉換為HTML終止標記
string bl2br(string str)
b. 將特殊字元轉換wieldHTML等價形式(不解析格式)
string htmlentities(string str[,int quote_style[,int charset]])
string htmlspecialchars(string str[,int quote_style[,string charset]])
c. 將HTML轉換為純文字,移除所有的php和html標籤
string strip_tags(string str[,string allowable_tags])
d. 將文本轉換為HTML等價形式
array get_html_translaction_table(int table[,int quote_style])
e. 建立一個自訂的轉換清單
string strtr(string str,array replacements)
8.Regex函數的替代函數
a. strtok函數根據預定義的字串列表來解析字串
string strtok(string str,string tokens):返回直到遇到tokens之前的所有內容
b. 根據預定義的定界符分析字串
array explode(string separator,string str[,int limit]):分割字串
c. 將數群組轉換為字串
string implode(string delimiter, array array)
d. 找到字串的第一次出現
int strpos(string str,string substr[,int offset])
e. 找到字串的最後一次出現
int strrpos(string str,char substr[,offset])
f. 用另外一個字串替代字串的所有執行個體
mixed str_replace(string occurrence,mixed replacement,mixed str[,int count])
g. 擷取字串的一部分strstr返回字串中預定義字串第一次出現開始的剩餘部分
string strstr(string str,string occurrence)
h. 根據預定義的位移返回字串一部分
string substr(string str,int start[,ing length]):start可為負數,表示倒數第幾開始
i. 確定字串出現的頻率
int substr_count(string str,string substring)
j. 用另一個字串替換一個字串的一部分
string substr_replace(string str,string replacement,int start[,int length])
9.填充和剔除字串
a. 從字串開始出裁剪字元
string ltrim(string str[,string charliset])
b. 從字串結尾裁剪字元
string rtrim(string str[,string charliset])
c. 從字串兩端裁剪字元
string trim(string str[,string charliset])
d. 填充字串
string str_pad(string str,int length[,string pad_string[,int pad_type]])
10.字元和單詞計數
a. 字串中字元計數
mixed count_chars(string str[,mode])
b. 字串中單詞總數計數
mixed str_word_count(string str[,int format])
二、PHP Web開發中常用的三個表單驗證函式

(1)isset();——適合於檢測是否存在這個參數。用來避免引用不存在的變數

定義和作用範圍:用於測試一個變數是否具有值(包括0,FALSE,或者一個空字串都返回true,但不能是NULL),即:“http://localhost/?fo=”也是可以通過檢測,因此不適用。但如果是“http://localhost/”參數中並不含fo參數,就可以用isset來檢測,此時isset($_GET['fo'])返回false

不適用於:該函數不適合於驗證html表單中的文本的有效方式。要檢查使用者輸入文本是否有效,可以用empty();

(2)empty();——最好用的一個函數,用於檢查變數是否具有空值

 定義和作用範圍:用於檢查變數是否具有空值:包括:空字串,0,null 或false,這些都返回false,即:“http://localhost/?fo=”或“http://localhost/?fo=0”時,empty檢測出來的結果都是ture

不適用範圍:不適用於檢測可為0的參數

(3)is_numeric();——檢查變數是否為數字

定義和作用範圍:檢查變數是否為數字,只適用於檢測數字

不適用範圍:但假如參數名不存在,會出錯,因此不適合於第一層檢測

另外還有一個好用的驗證函式是checkdate(month,day,$year),用來確認某個日期是否存在或在過去是否存在

綜合樣本:

這是表單:

複製代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>表單驗證樣本</title>
</head>
<body>
</body>
<p>
<a href="?fo=Jack">傳有效值</a> <a href="?fo=">傳空值</a> <a href="?fo=0">傳0值</a>
<br /><br />
<a href="?sex=m">性別:男</a> <a href="?sex=f">性別:女</a>
<br /><br />
<a href="/">清空</a>
<br /><br />
<input type="text" value="<?php echo $_GET['fo']!=''?$_GET['fo']:'';?>" size="155" />
</p>
</html>[code]
這是驗證
[code]<?php
ini_set("display_errors",1);
//ini_set("error_reporting",E_ALL); print_r
error_reporting(E_ALL);

$a=NULL;
if(isset($a))echo '變數$a的isset為真';

echo '<h2>isset的情形:</h2>';
if(isset($_GET['fo'])){
echo '變數\'fo\'的isset為真,變數可用';
}else{
echo '變數\'fo\'的isset為假,無變數設定';
}

echo '<h2>empty的情形:</h2>';
if(empty($_GET['fo'])){
echo '變數\'fo\'的empty為真,即空值或無效值';
}else{
echo '變數\'fo\'的empty為假,有值';
}

echo '<h2>is_numeric的情形:</h2>';
if(is_numeric($_GET['fo'])){ //在參數中無fo參數時,則出錯。
echo '變數\'fo\'的is_numeric為真,是數字';
}else{
echo '變數\'fo\'的is_numeric為假,不是數字';
}

echo "<h2>\$_GET['fo']=''的情形:</h2>";
if($_GET['fo']==''){ //在參數中無fo參數時,則出錯。
echo 'fo無值,空的字串';
}elseif($_GET['fo']!=''){
echo 'fo有值,不為\'\'.';
}

echo "<h2>\$_GET['sex']='m'的情形:</h2>";
if($_GET['sex']=='m'){ //當參數中無sex變數時就會出錯。
echo '男的';
}elseif($_GET['sex']=='f'){
echo '女的';
}
?>

 

三、其他常用庫函數

(1)ini_set ini_get——可操作配置參數列表
為了使自己的程式在不同的平台中擁有更好的相容性,很多時候我們都要擷取當前Php的運行環境參數。
比如我們常用到的:
擷取 magic_quotes_gpc 狀態,來決定當表單提交時我們是否轉義(addslashes)資料;
設定 max_execution_time 來延長程式的執行時間;
設定 error_reporting 使自己的項目在開發與運營階段切換;
設定 memory_limit 加大記憶體等等…
(2)ini_set(string varname, string newvalue ) : //設定環境配置的參數
ini_get(string varname) : //擷取環境配置的參數
PHP ini_set函數是設定選項中的值,在執行函數後生效,指令碼結束的時候,這個設定也失效。不是所有的選項都能被改函數設定的。具體那些值能夠設定,可以查看手冊中的列表
其實你把PHP ini_set函數和ini_get結合使的話,非常好。比如你想在設定檔裡添加自己的包含檔案路徑,但是你有沒有許可權更改php.ini,那麼你可以結合兩個函數:
ini_set ( 'include_path' , ini_get ( 'include_path' ). ':/your_include_dir:' );
(3)chdir(dirname(__FILE__)); //切換到global.php所在目錄
(4)ob_start(‘ui_handler');//設定輸出緩衝區控制代碼為ui_handler,即系統首頁面為ui_handler函數所定義的內容
(5)int intval(mixed var, int [base]);
本函數可將變數轉成整數類型。可省略的參數 base 是轉換的基底,預設值為 10。轉換的變數 var 可以為數組或類之外的任何類型變數。
(6)error_reporting(report_level) 函數—— 設定 PHP 的報錯層級並返回當前層級
其中report_level可取值為0、1、2、4、8、16、32、……、4096、8191
例子:任意數目的以上選項都可以用“或”來串連(用 OR 或 |),這樣可以報告所有需要的各層級錯誤。例如,下面的代碼關閉了使用者自訂的錯誤和警告,執行了某些操作,然後恢複到原始的報錯層級:

複製代碼 代碼如下:
<?php

//禁用錯誤報表

error_reporting(0);

//報告執行階段錯誤

error_reporting(E_ERROR | E_WARNING | E_PARSE);

//報告所有錯誤

error_reporting(E_ALL);

?>

 常見疑難問題解答
1、rand(min,max)與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() 快四倍。
2、PHP echo, print, print_r, printf, sprintf和var_dump函數的區別和使用
1) echo
echo() 實際上不是一個函數,是php語句,因此您無需對其使用括弧。不過,如果您希望向 echo() 傳遞一個以上的參數,那麼使用括弧會發生解析錯誤。而且echo是返回void的,並不傳回值,所以不能使用它來賦值。
例子:
複製代碼 代碼如下:
<?php $a = echo("55nav"); // 錯誤!不能用來賦值
echo "55nav"; // 55nav
echo ("55nav"); // 55nav
echo ("55nav","com"); //發生錯誤,有括弧不能傳遞多個參數
echo "55nav"," com"," is", " web"; // 不用括弧的時候可以用逗號隔開多個值, 會輸出 55nav com is web
echo "55nav is good web."; // 不管是否換行,最終顯示都是為一行 55nav is good web.
echo "$fistname com"; // 如果 $firstname = "55nav", 則會輸出 55nav com.
echo '$firstname com'; // 由於使用單引號,所以不會輸出$firstname的值,而是輸出 $firstname com12
?>

2) print
print() 和 echo() 用法一樣,但是echo速度會比print快一點點。實際上它也不是一個函數,因此您無需對其使用括弧。不過,如果您希望向print() 傳遞一個以上的參數,那麼使用括弧會發生解析錯誤。注意print總是返回1的,這個和echo不一樣,也就是可以使用print來賦值,不過沒有實際意 義。
例子:
複製代碼 代碼如下:
<?php $a = print("55nav"); // 這個是允許的
   echo $a; // $a的值是14
?>;

3) print_r 函數——即列印預定義變數的值
print_r函數列印關於變數的易於理解的資訊。
文法:mixed print_r ( mixed $expression [, bool return ] )
如果變數是string , integer or float , 將會直接輸出其值,如果變數是一個數組,則會輸出一個格式化後的數組,便於閱讀,也就是有key和value對應的那種格式。對於object對象類同。 print_r有兩個參數,第一個是變數,第二個可設為true,如果設為true,則會返回字串,否則返回布爾值TRUE。
例子:
複製代碼 代碼如下:

<?php $a="55nav";
    $c = print_r($a);
    echo $c;  // $c的值是TRUE
    $c = print_r($a, ture);
    echo $c; // $c的值是字串55nav
?>

4) printf函數
printf函數返回一個格式化後的字串。
文法:printf(format,arg1,arg2,arg++)
參數 format 是轉換的格式,以百分比符號 (“%”) 開始到轉換字元結束。下面是可能的 format 值:
* %% – 返回百分比符號
* %b – 位元
* %c – 依照 ASCII 值的字元
* %d – 帶符號十進位數
* %e – 可續計數法(比如 1.5e+3)
* %u – 無符號十進位數
* %f – 浮點數(local settings aware)
* %F – 浮點數(not local settings aware)
* %o – 八位元
* %s – 字串
* %x – 十六進位數(小寫字母)
* %X – 十六進位數(大寫字母)
arg1, arg2, arg++ 等參數將插入到主字串中的百分比符號 (%) 符號處。該函數是逐步執行的,在第一個 % 符號中,插入 arg1,在第二個 % 符號處,插入 arg2,依此類推。如果 % 符號多於 arg 參數,則您必須使用預留位置。預留位置被插入 % 符號之後,由數字和 “\$” 組成。可使用數字指定顯示的參數,詳情請看例子。
例子:
複製代碼 代碼如下:
<?php printf("My name is %s %s。","55nav", "com"); // My name is 55nav com
    printf("My name is %2\$s %1\$s","55nav", "com"); // 在s前添加1\$或2\$.....表示後面的參數顯示的位置,此行顯示My name is com 55nav
?>

5) sprintf函數
此函數使用方法和printf一樣,唯一不同的就是該函數把格式化的字串寫寫入一個變數中,而不是輸出來。
例子:
複製代碼 代碼如下:
<?php sprintf("My name is %1\$s %1\$s","55nav", "com");  //你會發現沒有任何東西輸出的
    $out = sprintf("My name is %1\$s %2\$s","55nav", "com");
    echo $out;  //輸出 My name is 55nav com
?>

6) var_dump函數
功能: 輸出變數的內容、類型或字串的內容、類型、長度。常用來調試。
例子:
複製代碼 代碼如下:
<?php $a=100;
    var_dump($a); //int(100)
    $a=100.356;
    var_dump($a); //float(100.356)
?>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.