1. 程式人生 > >兩千行PHP學習筆記

兩千行PHP學習筆記

//語法錯誤(syntax error)在語法分析階段,原始碼並未被執行,故不會有任何輸出。


/* 【命名規則】 */
常量名 類常量建議全大寫,單詞間用下劃線分隔    // MIN_WIDTH
變數名建議用下劃線方式分隔            // $var_name
函式名建議用駝峰命名法                // varName
定界符建議全大寫                 // <<<DING, <<<'DING'
檔名建議全小寫和下劃線、數字        // func_name.php
私有屬性名、方法名建議加下劃線        // private $_name _func
介面名建議加I_ // interface I_Name /* 語言結構 */ array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset() echo, print 可省略括號。 /* 預定義常量 */ PATH_SEPARATOR //路徑分隔符(Windows為分號,類Unix為冒號) DIRECTORY_SEPARATOR //目錄分隔符 PHP_EOL //當前系統的換行符 PHP_VERSION //PHP版本號 PHP_OS //PHP服務作業系統 PHP_SAPI //
用來判斷是使用命令列還是瀏覽器執行的,如果 PHP_SAPI=='cli' 表示是在命令列下執行 PHP_INT_MAX INT最大值,32位平臺時值為2147483647 PHP_INT_SIZE INT字長,32位平臺時值為4(4位元組) M_PI //圓周率值 M_E //自然數 //PHP執行環境檢測函式 php_sapi_name() //返回一個PHP與WEB伺服器介面型別的小寫字串 該函式返回值與常量PHP_SAPI一致! 介面型別:SAPI(the Server API, SAPI) 可能值:aolserver、apache、apache2filter、apache2handler、caudium、cgi、cgi
-fcgi、cli、 continuity、embed、isapi、litespeed milter、nsapi、phttpd、pi3web、roxen、thttpd、tux、webjames /* 大小寫問題 */ - 類名、方法名、屬性名、函式名:不區分大小寫 - 變數名、常量名、元素下標:區分大小寫 /* 可變識別符號 */ 可變變數 $i = 3; $k = 'i'; echo $$k; //輸出3 可變函式 function func() {echo 'hello!';} $i = 'func'; $i(); //輸出hello 可變下標 $i = '1234'; $k = 3; echo $i[$k]; //輸出4 可變類名 class CLS{public $k = 'hello';} $i = 'CLS'; $j = new $i; echo $j->k; 可變屬性 class CLS{public $k = 'hello';} $i = 'k'; $j = new CLS; echo $j->$i; 可變方法 class CLS{public function k(){echo 'hello';}} $i='k'; $j=new CLS; $j->$i(); /* 可變變數 */ * 用於業務邏輯判斷得到某些具體資訊 $var_name = "class_name"; $$var_name = "PHP0913"; // $class_name = "PHP0913";$class_name已存入記憶體中 var_dump($class_name); // var_dump($$var_name); /* 變數函式 */ get_defined_vars //返回由所有已定義變數所組成的陣列(包括環境變數、伺服器變數和使用者定義的變數) /* unset() */ * unset()僅刪除當前變數名和引用,其值並未被刪除 * 引用傳遞中,刪除一個變數及其引用,其他變數及引用均存在,且值依然存在 echo "<br />"; $v3 = '值'; $v4 = &$v3; unset($v4); var_dump($v3, $v4); /* 變數的最長有效期 */ * 當前指令碼的執行週期,指令碼執行結束,變數即消失 /* 預定義變數/超全域性變數 */ $GLOBALS $_COOKIE $_ENV $_FILES $_GET $_POST $_REQUEST $_SERVER $_SESSION /* 常量定義 */ define(常量名, 常量值, [區分大小寫引數]) //true表示不區分/false表示區分大小寫 const 常量名 = 常量值 // 新,建議 常量名可以使用特殊字元 constant($name) // 獲取常量名 // 例:echo constant('-_-'); /* 常量相關函式 */ defined get_defined_constants /* 預定義常量 */ __FILE__ 所在檔案的絕對路徑 __LINE__ 檔案中的當前行號 __DIR__ 檔案所在目錄 __FUNCTION__ 函式名稱 __CLASS__ 類的名稱 __METHOD__ 類的方法名 __NAMESPACE__ 當前名稱空間的名稱 /* 整型 */ 整型佔用4位元組,共4*8=32位,最大值為2147483647,最小值為-2147483648,最小值的絕對值比最大值的大1 最高為表示正負,1表示負,0表示正 /* 進位制轉換函式 */ 只能十進位制與其他進位制進行轉換,只有六種 轉換時,引數應是字串(即不可含八進位制的“0”或十六進位制的“0x”) 10 dec 2 bin 8 oct 16 hex hexdec() 十六進位制轉十進位制 也可寫hex2dec() dechex() 十進位制轉十六進位制 也可寫dec2hex() bindec() 二進位制轉十進位制 也可寫bin2dec() decbin() 十進位制轉二進位制 也可寫dex2bin() octdec() 八進位制轉十進位制 也可寫oct2dec() decoct() 十進位制轉八進位制 也可寫dec2oct() /* 浮點數 */ 浮點數不能比較大小 !!! 幾乎所有小數,在儲存時都是近似值而不是精確值! 最大值:+/- 1.8E308 PHP所能儲存的最長小數位:14位 /* 單引號字串 */ 單引號字串中,只能轉義反斜槓和單引號 /* 雙引號字串 */ 只解析字串一次 !!! eval 把字串作為PHP程式碼執行 大括號包裹變數,可確定變數名界限。如:"aaa{$bbb}ccc" 雙引號中可以將ASCII碼轉換為字元 "\x61" -> a // 字串中不需0,整型中才是0x前導 "\x49\x54\x43\x41\x53\x54" -> ITCAST 將ASCII轉成字元函式chr() 將字元轉成ASCII函式ord() #雙引號轉義列表 \n 換行 \r 回車 \t 水平製表符 \\ 反斜線 \$ 美元標記 \v 垂直製表符 \e Escape \f 換頁 \" 雙引號" \[0-7]{1,3} 符合該正則表示式序列的是一個以八進位制方式來表達的字元 \x[0-9A-Fa-f]{1,2} 符合該正則表示式序列的是一個以十六進位制方式來表達的字元 /* 定界符 */ herodoc - 功能同雙引號,能解析 $str = <<<AAA 字串內容 AAA; nowdoc - 功能同單引號,不能解析 只在開始位置有單引號 $str = <<<'AAA' 字串內容 AAA; /* 字串的使用 */ 可將字串當作一個字元的集合來使用,可獨立訪問每個字元。僅適用於單位元組字元(字母、數字、半形標點符號),像中文等不可用 $str = "abcd"; echo $str[3]; // d echo $str{0}; // a /* 【型別操作函式】 */ //獲取/設定型別 gettype($var) //獲取變數的資料型別 settype($var, $type) //設定變數的資料型別 //型別判斷 is_int is_float is_null is_string is_resource is_array is_bool is_object is_numeric 檢測變數是否為數字或數字字串 //轉換成指定的資料型別 boolval floatval intval strval //強制轉換型別 (int) (float) (string) (bool) (array) (object) (unset) //轉換為NULL (binary) 轉換和 b字首轉換 //轉換成二進位制 var_dump 列印變數的相關資訊。 顯示關於一個或多個表示式的結構資訊,包括表示式的型別與值。 陣列將遞迴展開值,通過縮排顯示其結構。 var_export($var [,bool $return]) //輸出或返回一個變數的字串表示 $return:為true,則返回變數執行後的結果 print_r 列印關於變數的易於理解的資訊 empty 檢查一個變數是否為空 isset 檢測變數是否存在 /* 【流程控制】 */ //if語句的替代語法 if (條件判斷) : 語句塊; elseif (條件判斷) : 語句塊; else : 語句塊; endif; //流程控制的替代語法 在嵌入HTML時常用 將 { 換成 : , 將 } 換成 endif; 等 endif endwhile endfor endforeach endswitch /* 【switch】 */ switch (條件) { case 狀態值1: 語句塊; [break;] case 狀態值2: 語句塊; [break;] case 狀態值3: case 狀態值4: 語句塊; [break;] default: 語句塊; [break;] } switch是狀態分支,特殊的迴圈 先計算出狀態值,再去與判斷數作比較 break退出流程 /* 【for迴圈】 */ for (條件初始化表示式; 條件判斷表示式; 條件變化表示式) { 迴圈體 } 假設迴圈體被執行了N次,則 條件初始化表示式被執行1次 條件判斷表示式被執行N+1次 條件變化表示式被執行N次 注意: 1. 迴圈變數在for語句結束後還可以繼續使用,值為第一次失敗的值 2. 迴圈變數在for迴圈體內可以使用 3. 任何條件表示式均可省略,但分號不能省略 a. 條件初始化表示式被省略時,迴圈變數被賦值為null,在與條件判斷時, 進行型別轉換後再比較。也可以在for語句外進行初始化。 b. 條件判斷表示式被省略時,表示迴圈為真,進入死迴圈 c. 條件變化表示式被省略時,可以在迴圈體內完成 4. 每個表示式均可由多條語句組成,每條語句之間使用逗號分割 如果條件判斷表示式由多條語句組成,都會執行,但只有最後一條語句才作為判斷條件 5. for只能遍歷數值型索引下標陣列 陣列長度函式:count() 6. 應該將可以初始化的語句均放在條件初始化表示式內,這樣可以省去很多執行次數 /* 【goto】5.3+ 版本 */ 用來跳轉到程式中的某一指定位置 該目標位置可以用目標名稱 加上冒號來標記。 PHP中的goto有一定限制,只能在同一個檔案和作用域中跳轉, 也就是說你無法跳出一個函式或類方法,也無法跳入到另一個函式。 你也無法跳入到任何迴圈或者switch結構中。 常見的用法是用來跳出迴圈或者switch,可以代替多層的break。 可以從迴圈(switch)中跳出來,但不能從外部跳轉進去。而函式或類方法,向外向內均不可。 goto a; echo 'Foo'; a: echo 'Bar'; /* 【檔案載入】 */ require / include / require_once / include_once 檔案載入只是載入目標檔案內的程式碼並執行,與載入的檔案型別無關 檔案載入屬於執行階段,當執行到require等語句時,才載入該檔案的程式碼, 編譯並執行,然後回到require等語句位置繼續執行下面的語句 【注意】 在載入開始時,先退出PHP模式; 再載入目標檔案程式碼,執行該程式碼; 結束時,再進入PHP模式。 require:處理失敗,產生 E_COMPILE_ERROR 錯誤,指令碼中止。 include:處理失敗,產生 E_WARNING 錯誤,指令碼繼續執行。 #不建議使用require_once/include_once /* 【相對路徑】 */ 當前瀏覽器請求的哪個指令碼,當前位置就是屬於哪個指令碼。 ./filefile 都表示當前目錄下的file檔案 file情況(巢狀載入檔案時): 如果當前目錄沒找到該檔案就在程式碼檔案所在目錄中繼續找。 如果當前目錄找到有該檔案,則不會再在程式碼檔案所在目錄去找也不會再載入。 __DIR__ 指令碼檔案所在目錄 __FILE__ 指令碼檔案路徑 include_path 載入檔案查詢目錄 set_include_path() 設定include_path,可多個,用字串作引數 該函式設定的path只針對該當前檔案有效 該設定只針對查詢未直接寫檔案路徑方式有效 設定新的include_path會覆蓋原來的 get_include_path() 獲取當前include_path設定項,無引數 路徑分隔符,在Windows下是分號,在Linux下是冒號 利用預定義常量 PATH_SEPARATOR 來獲得當前的分隔符 如果直接寫檔名: 1. include_path所設定的 2. 當前目錄 3. 程式碼所在檔案的目錄 如果檔名前帶有路徑,則會直接根據路徑查詢,include_path直接被忽略 /* 【return】 */ return與require結合,可返回檔案的內容,return寫在被載入的檔案內 return可以終止所在指令碼的執行,作為普通指令碼語句 return可以返回函式的相應值 /* 【終止和延遲指令碼執行】 */ die / exit 終止 return是終止所在指令碼的執行 die和exit會立即終止指令碼執行 die("到此為止"); 該函式內的字串可被輸出 sleep() 延遲(單位:秒) 預設最多可延遲30秒,PHP配置可以修改 max_execution_time 例:sleep(12); usleep() 以指定的微秒數延遲執行 time_sleep_until 使指令碼睡眠到指定的時間為止 /* 【函式】 */ 1. 函式的宣告是在編譯時,故先定義再呼叫,定義與呼叫無先後關係! 2. 檔案只是程式碼的載體,程式均在記憶體中執行! 3. 如果函式的定義在需要載入的檔案內,則需要先載入該檔案,否則調用出錯! 4. 函式的定義可以出現在其他的程式碼段中,此時函式不會在編譯階段被執行 只有被執行到時才會被定義!只有獨立定義時才會被編譯在記憶體中! 如果出現在其他函式體內,也需要外層函式被呼叫時才被定義並生效! 5. 函式名不區分大小寫 6. 不允許重名,包括系統函式 7. 【可變函式】 函式名可以用其他變數代替 $func_name = "sayHello"; $func_name(); //此時呼叫sayHello()函式 注意:只有在呼叫時才能使用變數,定義時不允許! 8. 變數可作為函式名呼叫函式,陣列元素值也可以! 9. 形式引數parameter,實際引數argument 可以對引數傳遞 null,表示該形參不想傳遞值 形參與實參之間既可值傳遞,也可引用傳遞。 引用傳遞引數,應該在定義函式時就在形式引數前加上 & 符號,而此時呼叫函式實參必須為變數 如何選擇使用哪種傳遞方式? a. 是否需要保證原始資料的完整性 b. 是否需要增加效率 c. 對大資料引用傳遞可節省記憶體 10. 引數預設值 a. 函式的引數預設值必須是已經確定的值,不能是變數! 只要在呼叫之前定義該常量,則可以使用常量作為引數預設值 b. 函式預設值可以有多個,建議將有預設值的引數放在引數列表的最後面 這樣可以在呼叫函式時,不賦予後面有預設值的引數值,否則會出錯 c. 預設引數可以是非標量型別,比如陣列、null d. 任何預設引數必須放在任何非預設引數的右側 11. 引數數量 a. 形引數量多於實引數量 報告警告級別錯誤,並以NULL代替 b. 實參多於形參 不報告錯誤,依次為形參賦值 c. 不確定引數數量 1) 一個形參都不定義,永遠都是實參多於形參 2) 【可變數量引數】 func_get_args() 獲取當前函式被呼叫時所有實參的值,返回一個所有實參值組成的陣列 func_get_arg() 獲取某個實參的值,通過索引值標識,e.g: func_get_arg(0) func_num_args() 獲取所有實參的數量 12. 【return】返回值 a. 函式只有一個返回值,可以通過返回一個數組來得到類似的結果,但可以有多條return語句 b. return語句會立即中止函式的執行,並將控制權交回呼叫該函式的程式碼行 c. 可以返回包括陣列和物件的任意型別 d. 函式的返回也分值傳遞和引用傳遞(返回的是一個變數才可) 1) 預設是值傳遞方式 2) 引用傳遞方式: - 定義函式時,函式名前加上& 表示該函式可以返回引用 - 呼叫函式時,函式名前加上& 表示取得函式返回的引用 此時,函式外修改返回值,會修改函式內的該返回變數的值 - 如果函式需返回引用,則需要返回一個變數才可以 - 從函式返回一個引用,必須在函式宣告和指派返回值給一個變數時都使用引用操作符& function &returns_reference(){return $someref;} $newref =& returns_reference(); 3) 返回引用的作用 /* 【變數作用域】 */ a. 全域性變數和區域性變數 1) 作用域之間不重疊,即不同作用域的變數,之間不可訪問 2) 全域性作用域 - 函式之外的區域 3) 區域性作用域 - 函式內的區域,每個函式都是一個獨立的作用域 b. 超全域性變數,既可以在全域性也可在區域性使用,僅能用系統自帶的,均是陣列變數。 $GLOBALS $_COOKIE $_ENV $_FILES $_GET $_POST $_REQUEST $_SERVER $_SESSION c. $GLOBALS 1) 不能存在超全域性變數,但可以有超全域性的資料! 2) 將需要的資料放到超全域性變數的陣列內,但統一使用$GLOBALS 3) $GLOBALS 特徵 - 每個全域性變數就是對應$GLOBALS內的一個元素! 每當增加一個全域性,則自動在$GLOBALS內增加一個同名元素! 同理,每當增加元素,也會增加一個全域性變數,一般在函式內增加 - 做的任何修改,也會對映到另一個,包括更新和刪除 在函式內訪問全域性變數,只需使用$GLOBALS - 出現過的全域性變數,就可以通過$GLOBALS這個陣列取得 4) PHP生命週期中,定義在函式體外部的所謂全域性變數,函式內部是不能直接獲得的 4) global關鍵字(不建議使用) 將區域性變數宣告為同名全域性變數的一個'引用'!相當於常量的引用傳遞 global $var; // $var = &$GLOBALS['var']; 不同於$GLOBALS!!! global在函式產生一個指向函式外部變數的別名變數,而不是真正的函式外部變數。 $GLOBALS確確實實呼叫是外部的變數,函式內外會始終保持一致。 global的作用是定義全域性變數,但是這個全域性變數不是應用於整個網站,而是應用於當前頁面,包括include或require的所有檔案。 d. 1) 作用域只針對變數,對常量無效 2) 被載入檔案中定義的變數作用域取決於被載入的位置。 函式外被載入就是全域性,函式內被載入就是區域性! /* 【變數生命週期】 */ 1. 指令碼結束時,全域性變數消失 2. 函式執行完時,區域性變數消失 3. 靜態變數 static關鍵字 靜態變數僅在區域性函式域中存在,但當程式執行離開此作用域時,其值並不丟失。 靜態變數僅會被初始化一次,其他區域性變數每次被呼叫時都會被重新賦值。 static宣告的靜態變數的生命週期會被一直延續。 /* 【迭代和遞迴】 */ 迭代比遞迴效率高! 迭代是一種思想(演算法),結構和使用上如同迴圈! 遞迴是一種思想(演算法),將大問題拆分成小問題,逐一解決小問題以解決大問題 要求大問題和小問題的解決方案是一致的! 遞迴的結構和語法體現如圖函式。函式體內呼叫函式本身! 遞迴出口:當該問題可以解決時,則不用再遞迴 /* 【匿名函式/閉包函式】 */ 匿名函式,也叫閉包函式(closures),允許臨時建立一個沒有指定名稱的函式。 1. 定義匿名函式時,不需增加函式名。 2. PHP對匿名函式的管理,以一個物件的方式進行處理。 3. 匿名函式應該存放到變數內。 4. 匿名函式通過Closure類來實現 5. 可以使用函式作為函式的引數和返回值 6. 宣告函式時可以使用 use($param) 來向函式中傳入函式外的變數,結合變數引用來實現閉包 7. 可以用變數引用函式 $func = function ($e) { echo $e; }; //結束時,需分號結束,如同變數賦值 var_dump($func); //使用匿名函式 $func('ITCAST'); //函式的呼叫 這不是可變函式,而是物件。Closure閉包類 //use語法 匿名函式傾向於值的概念,可能出現在任何地方。 use可以使得匿名函式使用其外部作用域的變數。非全域性! use與全域性的區別: use使用其外部作用域的變數 function out() { $v = "in out"; $func = function () use (& $v) { var_dump($v); } } use類似引數的自動傳遞,也支援值與引用的傳遞方式。 //作用 常作為'臨時函式'被呼叫(只在某個地方被呼叫的函式) 例如: PHP存在一個array_map()函式,功能是針對一個函式內每個元素,去呼叫某個函式 操作結果(array) = array_map(操作函式, 運算元組); $result_arr = array_map(function ($v) {return $v3}, $arr); //閉包用法例項 function closureCreater() { $x = 1; return function($fun = null) use(&$x) {//按引用傳值 echo "<br />" . $x++; $fun and $fun(); }; } $x = "hello world"; $test = closureCreater(); $test(); $test(function(){ echo "closure test one"; }); $test(function(){ echo "closure test two"; }); $test(function() use($x){ echo "<br />".$x;}); //將函式儲存為陣列元素 $x = 'outer param.'; $arr = array(); $arr[] = function($str)use($x){ return $str.$x; }; echo $arr[0]('test fun in arr,'); /* 【陣列】 */ 關聯陣列:鍵和值有關聯,鍵表示值的邏輯含義。 索引陣列:鍵和值無關聯,鍵表示值的位置。通常下標從0開始,遞增元素 count($var [,$mode]) //統計陣列元素個數 $mode可選,設為1或true時則遞迴統計 $var非陣列,返回1;$var未初始化或等於null或空陣列,返回0 //鍵名的使用 整型數字鍵不需加引號($arr[1]) 字串數字鍵也不需加引號($arr = array('1'=>'abc'); $arr[1]) 關聯陣列,字串鍵需加引號($arr = array('a'=>'aaa'); $arr['a']) 關聯陣列,雙引號中解析變數,可不加引號($arr = array('a'=>'aaa'); "$arr[a]") /* 【指標】 */ current/pos 返回當前被內部指標指向的陣列單元的值,並不移動指標。 key 返回陣列中當前單元的鍵名,並不移動指標 next 將陣列中的內部指標向前移動一位,並返回移動後當前單元的值。先移動,再取值。 prev 將陣列的內部指標倒回一位,並返回移動後當前單元的值先移動,再取值。 end 將陣列的內部指標指向最後一個單元,並返回最後一個單元的值 reset 將陣列的內部指標指向第一個單元,並返回第一個陣列單元的值 each 返回陣列中當前的鍵/值對並將陣列指標向前移動一步。 返回的是一個由鍵和值組成的長度為4的陣列,下標0和key表示鍵,下標1和value表示值 在執行each()之後,陣列指標將停留在陣列中的下一個單元 或者當碰到陣列結尾時停留在最後一個單元。 如果要再用 each 遍歷陣列,必須使用 reset()。 1. 以上指標操作函式,除了key(),若指標移出陣列,則返回false。而key()移出則返回null。 2. 若指標非法,不能進行next/prev操作,能進行reset/end操作 3. current/next/prev 若遇到包含空單元(0或"")也會返回false。而each不會! list 把陣列中的值賦給一些變數。list()是語言結構,不是函式 僅能用於數字索引的陣列並假定數字索引從0開始 /* 可用於交換多個變數的值 */ list($a, $b) = array($b, $a); 例:list($drink, , $power) = array('coffee', 'brown', 'caffeine'); 1. 複製陣列,其指標位置也會被複制。 特例:如果陣列指標非法,則拷貝的陣列指標會重置,而原陣列的指標不變。 【指標問題】 誰第一個進行寫操作,就會開闢一個新的值空間。與變數(陣列變數)值傳遞給誰無關。 陣列函式current()被定義為寫操作,故會出現問題。 foreach遍歷的是陣列的拷貝,當被寫時,才會開闢一個新的值空間。 即,foreach迴圈體對原陣列進行寫操作時,才會出現指標問題。 如果開闢新空間時指標非法,則會初始化指標。 2. 如果指標位置出現問題,則reset()初始化一下就可解決。 /* 【遍歷陣列】 */ * 先找到元素,再獲取鍵和值 foreach foreach (array_expression as [$key =>] & $value) 當foreach開始執行時,陣列內部的指標會自動指向第一個單元。 獲取元素資訊後,移動指標,再執行迴圈體 1. foreach本身迴圈結構,break和continue適用於foreach 2. foreach支援迴圈的替代語法。 3. $value是儲存元素值的變數,對其修改不會改變陣列的元素值 4. $value支援元素值的引用拷貝,在$value前加上&即可 5. $key不支援引用傳遞 6. foreach遍歷的是原陣列的拷貝,而在迴圈體對陣列的操作是操作原陣列 即迴圈體對陣列的操作,對原陣列生效,對遍歷不生效。 先拷貝一份陣列用作遍歷 while...list...each while (list($key, $val) = mysql_fetch_row($result)) = each($arr) { echo "$key => $val\n"; } /* 【陣列函式】 */ //統計計算 count 計算陣列中的單元數目或物件中的屬性個數 array_count_values 統計陣列中所有的值出現的次數 array_product 計算陣列中所有值的乘積 array_sum 計算陣列中所有值的和 range 建立一個包含指定範圍單元的陣列 //獲取陣列內容 array_chunk 將一個數組分割成多個 array array_chunk(array $input, int $size[, bool $preserve_keys]) array_filter 用回撥函式過濾陣列中的單元 array_slice 從陣列中取出一段 array array_slice($arr, $offset [,$len [,$preserve_keys]]) array_keys 返回陣列中所有的鍵名 array array_keys(array $input[, mixed $search_value[, bool $strict]] ) 如果指定了可選引數 search_value,則只返回該值的鍵名。否則input陣列中的所有鍵名都會被返回。 array_values 返回陣列中所有的值,並建立數字索引 array_merge 合併一個或多個數組 一個數組中的值附加在前一個數組的後面。 如果輸入的陣列中有相同的字串鍵名,則該鍵名後面的值將覆蓋前一個值。 如果陣列包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。 如果只給了一個數組並且該陣列是數字索引的,則鍵名會以連續方式重新索引。 array_merge_recursive 遞迴地合併一個或多個數組 //搜尋 in_array 檢查陣列中是否存在某個值 bool in_array(mixed $needle, array $haystack[, bool $strict]) array_key_exists 檢查給定的鍵名或索引是否存在於陣列中 isset()對於陣列中為NULL的值不會返回TRUE,而 array_key_exists()會 array_search 在陣列中搜索給定的值,如果成功則返回相應的鍵名 array_combine 建立一個數組,用一個數組的值作為其鍵名,另一個數組的值作為其值 如果兩個陣列的單元數不同或者陣列為空時返回FALSE。 array_rand 從陣列中隨機取出一個或多個單元,返回鍵名或鍵名組成的陣列,下標是自然排序的 array_fill 用給定的值填充陣列 array_fill($start, $num, $value) array_flip 交換陣列中的鍵和值 array_pad 用值將陣列填補到指定長度 array_reverse 返回一個單元順序相反的陣列 array_unique 移除陣列中重複的值 array_splice 把陣列中的一部分去掉並用其它值取代 implode 將陣列元素值用某個字串連線成字串 explode($delimiter, $str [,$limit]) //使用一個字串分割另一個字串 $delimiter不能為空字串"" array_map 將回調函式作用到給定陣列的單元上,只能處理元素值,可以處理多個數組 如果callback引數設為null,則合併多個數組為一個多維陣列 array_walk 對陣列中的每個成員應用使用者函式,只能處理一個數組,鍵和值均可處理,與foreach功能相同 bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] ) //棧:後進先出 入棧和出棧會重新分配索引下標 array_push 將一個或多個單元壓入陣列的末尾(入棧) array_pop 將陣列最後一個單元彈出(出棧) 使用此函式後會重置(reset())array 指標。 //佇列:先進先出 佇列函式會重新分配索引下標 array_unshift 在陣列開頭插入一個或多個單元 array_shift 將陣列開頭的單元移出陣列 使用此函式後會重置(reset())array 指標。 //排序函式 sort 對陣列排序 rsort 對陣列逆向排序 asort 對陣列進行排序並保持索引關係 arsort 對陣列進行逆向排序並保持索引關係 ksort 對陣列按照鍵名排序 krsort 對陣列按照鍵名逆向排序 usort 使用使用者自定義的比較函式