字符串與數組互轉是 PHP 日常開發高頻操作。本文系統梳理 8 大核心函數族,含語法、參數、返回值、典型示例、性能差異與避坑指南,適合打印作桌面速查卡。
$types = "doc|docx|ppt|pptx|xls|xlsx|zip|rar";
$arr = explode('|', $types);
// ['doc','docx','ppt','pptx','xls','xlsx','zip','rar']
// limit > 0:最多返回 limit 個元素,最後一個包含剩餘字符串
explode('|', 'a|b|c', 2); // ['a', 'b|c']
// limit < 0:返回除最後 -limit 個元素外的所有
explode('|', 'a|b|c', -1); // ['a', 'b']
// limit = 0:同 1
注意:分隔符為空字符串會報錯;需分割多字符分隔符用 preg_split。
$str = "www.baidu.com";
str_split($str); // ['w','w','w','.','b','a','i','d','u','.','c','o','m']
str_split($str, 3); // ['www','.ba','idu','.co','m']
// length < 1 返回 false
// length > 字符串長度 返回整個字符串為單元素數組
多字節字符串:中文請用 mb_str_split($str, 1, 'UTF-8') (PHP 7.4+) 或循環 mb_substr。
preg_split('/\s+/', "a b\tc\n d"); // ['a','b','c','d'] 多種空白
preg_split('/[,;]/', "a,b;c"); // ['a','b','c'] 多種分隔符
$arr = ['Hello','World!','Beautiful','Day!'];
implode(' ', $arr); // "Hello World! Beautiful Day!"
implode('', $arr); // "HelloWorld!BeautifulDay!"
// 歷史參數順序:implode(array) 也合法,但建議雙參數
// separator 為空字符串時直接拼接
$str = "HellO neo";
strpos($str, 'O'); // 4
strpos($str, 'o'); // 8
strpos($str, 'x'); // false (需用 === false 判斷)
strpos($str, 'l', 3); // 3 (從索引 3 開始找)
陷阱:返回 0 表示在開頭,必須 === false 判斷不存在。
$str = "Hello world!";
substr($str, 0); // "Hello world!"
substr($str, 6, 5); // "world"
substr($str, -6); // "world!" (負數從末尾倒數)
substr($str, -6, 5); // "world"
substr($str, 0, -1); // "Hello world" (去掉最後 1 字符)
多字節:mb_substr($str, $start, $len, 'UTF-8')。
strlen("Hello world!"); // 12
strlen("中文"); // 6 (UTF-8 每字 3 字節)
mb_strlen("中文", 'UTF-8'); // 2
| 函數 | 說明 | 示例 |
|---|---|---|
strtolower | 全轉小寫 | "HELLO" → "hello" |
strtoupper | 全轉大寫 | "hello" → "HELLO" |
ucfirst | 首字母大寫 | "hello" → "Hello" |
ucwords | 每個單詞首字母大寫 | "hello world" → "Hello World" |
lcfirst | 首字母小寫 (PHP 5.3+) | "Hello" → "hello" |
mb_strtolower/upper | 多字節安全版 | 需指定編碼 |
| 場景 | 推薦 | 避免 |
|---|---|---|
| 固定分隔符分割 | explode | preg_split (慢 3-5x) |
| 多字符/正則分隔符 | preg_split | 多次 explode |
| 固定長度分割 | str_split | substr 循環 |
| 大數組合併 | implode | foreach 拼接 (慢、內存峰值高) |
| 查找是否包含 | strpos !== false | preg_match (無捕獲組時慢) |
| 中文長度/截取 | mb_strlen/mb_substr | strlen/substr (會按字節截斷) |
explode('', $str) → ValueError(PHP 8)或 Warning。strpos 返回 0 當作 false → 用 === false。substr($str, -1) 取最後一字符,substr($str, -2, 1) 取倒數第二字符。implode 參數順序顛倒在 PHP 7.4+ 棄用,PHP 8.0 移除。mbstring.internal_encoding 導致 mb_* 函數行為不一致,建議入口 mb_internal_encoding('UTF-8')。掌握這 8 大函數族的參數細節與性能特徵,能寫出更簡潔、高效、無 Bug 的字符串處理代碼。建議收藏本表,代碼審查時對照檢查。