PHP 內建超過 1000 個函數,熟練掌握高頻核心函數能大幅提升開發速度與程式碼品質。本文將常用函數分類整理為七大類,附上語法、參數、回傳值與實務範例,適合開發時快速查閱。
| 函數 | 說明 | 範例 |
|---|---|---|
strlen($str) | 位元組長度 | strlen('中文') // 6 (UTF-8) |
mb_strlen($str, 'UTF-8') | 字元長度(多位元組安全) | mb_strlen('中文', 'UTF-8') // 2 |
substr($str, $offset, $len?) | 位元組層級截取 | substr('abcde', 1, 2) // 'bc' |
mb_substr($str, $offset, $len?, 'UTF-8') | 字元層級截取 | mb_substr('你好世界', 0, 2, 'UTF-8') // '你好' |
strpos($haystack, $needle, $offset?) | 尋找首次出現位置(區分大小寫) | strpos('abcde', 'cd') // 2 |
stripos() | 不區分大小寫尋找 | stripos('AbC', 'bc') // 1 |
str_replace($search, $replace, $subject, &$count?) | 替換(支援陣列) | str_replace(['a','b'], 'x', 'abc') // 'xxc' |
preg_match($pattern, $subject, &$matches?) | 正則單次匹配 | preg_match('/\d+/', 'age 25', $m) // 1, $m[0]='25' |
preg_match_all($pattern, $subject, &$matches?) | 正則全域匹配 | preg_match_all('/\d+/', '2023-05-01', $m) // $m[0]=['2023','05','01'] |
explode($sep, $str, $limit?) | 分割字串為陣列 | explode(',', 'a,b,c') // ['a','b','c'] |
implode($glue, $pieces) | 陣列合併為字串 | implode('-', ['a','b']) // 'a-b' |
trim($str, $charlist?) | 移除首尾空白/指定字元 | trim(' hi ') // 'hi' |
mb_strtolower/strtoupper($str, 'UTF-8') | 多位元組大小寫轉換 | mb_strtoupper('ß', 'UTF-8') // 'SS' |
| 函數 | 說明 | 範例 |
|---|---|---|
time() | 目前 Unix 時間戳(秒) | time() // 1683000000 |
date($format, $timestamp?) | 格式化日期 | date('Y-m-d H:i:s') // '2023-05-02 10:00:00' |
strtotime($datetime, $base?) | 英文文字轉時間戳 | strtotime('+1 week') // 未來一周 |
microtime(true) | 微秒級浮點數時間戳 | microtime(true) // 1683000000.1234 |
date_default_timezone_set('Asia/Taipei') | 設定預設時區 | 建議在 bootstrap 階段設定 |
new DateTime() | 物件導向日期操作(推薦) | $dt = new DateTime(); $dt->modify('+1 day'); |
| 函數 | 說明 | 範例 |
|---|---|---|
abs($num) | 絕對值 | abs(-5) // 5 |
floor($num) | 向下取整 | floor(3.9) // 3 |
ceil($num) | 向上取整 | ceil(3.1) // 4 |
round($num, $precision, $mode?) | 四捨五入(支援銀行家演算法) | round(3.14159, 2) // 3.14 |
mt_rand($min, $max) | 梅森旋轉隨機整數(推薦) | mt_rand(1, 100) |
random_int($min, $max) | 密碼學安全隨機整數 | random_int(1, 100) |
pi() | 圓周率常數 | pi() // 3.1415926535898 |
| 函數 | 說明 | 範例 |
|---|---|---|
count($arr, $mode?) | 元素個數 | count([1,2,3]) // 3 |
array_keys($arr) | 取得所有鍵名 | array_keys(['a'=>1,'b'=>2]) // ['a','b'] |
array_values($arr) | 取得所有值(重新索引) | array_values(['a'=>1,'b'=>2]) // [1,2] |
array_merge($arr1, $arr2...) | 合併陣列(字串鍵後覆蓋前) | array_merge(['a'=>1],['a'=>2]) // ['a'=>2] |
array_push($arr, $val...) | 尾端壓入(堆疊) | $a=[1]; array_push($a,2); // [1,2] |
array_pop($arr) | 尾端彈出 | $a=[1,2]; array_pop($a); // 2 |
array_unshift($arr, $val...) | 頭端壓入(佇列) | $a=[2]; array_unshift($a,1); // [1,2] |
array_shift($arr) | 頭端彈出 | $a=[1,2]; array_shift($a); // 1 |
in_array($needle, $haystack, $strict?) | 檢查值存在 | in_array(2, [1,2,3]) // true |
array_map($callback, $arr...) | 映射轉換 | array_map('strtoupper', ['a','b']) // ['A','B'] |
array_filter($arr, $callback?) | 過濾元素 | array_filter([1,2,3], fn($x)=>$x>1) // [2,3] |
array_reduce($arr, $callback, $initial?) | 減少/累加 | array_reduce([1,2,3], fn($c,$v)=>$c+$v, 0) // 6 |
array_push() 入棧,array_pop() 出棧array_push() 入隊,array_shift() 出隊SplDoublyLinkedList(O(1) 頭尾操作)SplHeap、SplPriorityQueueSplFixedArray(記憶體效率高)| 函數 | 說明 | 備註 |
|---|---|---|
gettype($var) | 取得型別字串 | 'integer', 'double', 'string', 'array', 'object', 'resource', 'NULL', 'boolean' |
settype($var, $type) | 強制轉換(修改原變數) | 回傳 bool |
is_int/is_float/is_bool/is_string/is_array/is_object/is_null/is_resource/is_scalar/is_numeric/is_callable/is_iterable/is_countable | 型別檢查 | 回傳 bool,is_numeric 含純數字字串 |
(int)$var / intval($var) | 轉整數 | |
(float)$var / floatval($var) | 轉浮點數 | |
(string)$var / strval($var) | 轉字串 | |
(bool)$var | 轉布林 | |
(array)$var | 轉陣列 | 物件轉為屬性陣列 |
| 函數 | 說明 | 範例/備註 |
|---|---|---|
file_exists($path) | 檔案/目錄是否存在 | 回傳 bool |
is_file($path) / is_dir($path) | 判斷檔案/目錄 | |
mkdir($path, $mode, $recursive) | 建立目錄 | mkdir('a/b/c', 0755, true) |
rmdir($path) | 刪除空目錄 | |
unlink($path) | 刪除檔案 | |
copy($src, $dest) | 複製檔案 | |
rename($old, $new) | 重命名/移動 | |
file_get_contents($path) | 一次讀取整檔 | 大檔案慎用 |
file_put_contents($path, $data, $flags?) | 寫入檔案 | FILE_APPEND 追加模式 |
fopen($path, $mode) | 開啟檔案指標 | 模式:r, w, a, r+, w+, a+, b (二進位) |
fread($handle, $length) | 讀取指定長度 | |
fwrite($handle, $string) | 寫入(覆蓋指標位置) | |
fseek($handle, $offset, $whence?) | 移動指標 | SEEK_SET, SEEK_CUR, SEEK_END |
fclose($handle) | 關閉指標 | |
filesize($path) | 檔案大小(位元組) | |
filemtime($path) | 最後修改時間(時間戳) | |
fileperms($path) | 權限(八進制) | substr(sprintf('%o', fileperms($file)), -4) |
glob($pattern, $flags?) | 模式匹配檔案 | glob('*.php') |
scandir($dir, $order?) | 列出目錄內容 | 含 . 與 .. |
本文整理的函數涵蓋 PHP 開發 90% 的日常場景。建議:
mb_* 系列)處理中文array_map/array_filter/array_reduce 函數式風格