implode() 與 explode() 是 PHP 處理字串與陣列轉換的兩大核心函數,掌握它們能讓資料拼接、切割、SQL 組裝變得簡潔高效。
用指定分隔符將陣列元素連接成字串。別名 join()。
$arr = ['a', 'b', 'c'];
$str = implode(',', $arr); // "a,b,c"
echo $str;
實戰場景:動態組裝 SQL IN 條件
$ids = [1, 3, 5, 7];
$placeholders = implode(',', array_fill(0, count($ids), '?')); // "?,?,?,?"
$sql = "SELECT * FROM users WHERE id IN ($placeholders)";
$stmt = $pdo->prepare($sql);
$stmt->execute($ids);
用分隔符將字串切割成陣列。注意:分隔符為空字串會拋出錯誤。
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
// ['piece1', 'piece2', 'piece3', 'piece4', 'piece5', 'piece6']
限制回傳元素數量(第三參數 limit):
$str = 'a,b,c,d,e';
explode(',', $str, 3); // ['a', 'b', 'c,d,e'] 正數:最多 N 個
explode(',', $str, -2); // ['a', 'b', 'c'] 負數:排除最後 N 個
| 情境 | 建議 |
|---|---|
| 分隔符可能出現在資料中 | 改用 JSON 序列化或罕見字元 (如 \x1F) |
| 需保留鍵名關聯陣列 | implode 忽略鍵名,若需保留請先 array_values() |
| 字串首尾有分隔符 | explode 會產生空元素,配合 array_filter() 移除 |
| 大量資料效能 | 兩函數均為 C 底層實作,效能極佳,無需手寫迴圈 |
// 去除空白並統一小寫
$tags = explode(',', $input);
$tags = array_map('trim', $tags);
$tags = array_filter($tags); // 移除空字串
$tags = array_map('strtolower', $tags);
$clean = implode(',', $tags);
| 函數 | 方向 | 參數順序 | 別名 | PHP 版本 |
|---|---|---|---|---|
| implode | Array → String | (string $glue, array $pieces) | join | 4.0+ |
| explode | String → Array | (string $separator, string $string, int $limit = PHP_INT_MAX) | — | 4.0+ |
記住:implode = 縫合 (glue)、explode = 炸裂 (split)。善用這對組合,能讓資料格式轉換代碼更簡潔、可讀性更高。