PHP explode() 與 implode()
explode() 用來將字串分割成陣列,implode() 用來將陣列合併成字串。這兩個函數經常搭配使用。
explode() - 分割字串
基本用法
<?php
$str = "apple,banana,orange";
$arr = explode(",", $str);
print_r($arr);
// Array ( [0] => apple [1] => banana [2] => orange )
?>
語法
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
$separator:分隔符$string:要分割的字串$limit:(可選)最大分割數量- 回傳值:分割後的陣列
使用 limit 參數
<?php
$str = "a,b,c,d,e";
// 正數 limit:最多分割成 N 個元素
print_r(explode(",", $str, 2));
// ['a', 'b,c,d,e']
print_r(explode(",", $str, 3));
// ['a', 'b', 'c,d,e']
// 負數 limit:去除最後 N 個元素
print_r(explode(",", $str, -1));
// ['a', 'b', 'c', 'd']
print_r(explode(",", $str, -2));
// ['a', 'b', 'c']
?>
分隔符不存在時
<?php
$str = "Hello World";
$arr = explode(",", $str);
print_r($arr);
// ['Hello World'](原字串作為唯一元素)
?>
多字元分隔符
<?php
$str = "apple--banana--orange";
$arr = explode("--", $str);
print_r($arr);
// ['apple', 'banana', 'orange']
?>
implode() / join() - 合併陣列
基本用法
<?php
$arr = ['apple', 'banana', 'orange'];
echo implode(",", $arr); // apple,banana,orange
echo implode(", ", $arr); // apple, banana, orange
echo implode("", $arr); // applebananaorange
?>
語法
implode(string $separator, array $array): string
$separator:分隔符$array:要合併的陣列- 回傳值:合併後的字串
join() 是 implode() 的別名,兩者完全相同。空陣列
<?php
$arr = [];
echo implode(",", $arr); // ""(空字串)
?>
常見應用
處理 CSV 資料
<?php
$csv = "Alice,25,Taipei,Engineer";
// 分割
$fields = explode(",", $csv);
[$name, $age, $city, $job] = $fields;
echo "Name: $name, Age: $age";
// 修改後合併
$fields[1] = 26; // 更新年齡
$newCsv = implode(",", $fields);
echo $newCsv; // Alice,26,Taipei,Engineer
?>
處理路徑
<?php
$path = "/home/user/documents/file.txt";
// 分割路徑
$parts = explode("/", $path);
print_r($parts);
// ['', 'home', 'user', 'documents', 'file.txt']
// 取得檔名
$filename = end($parts);
echo $filename; // file.txt
// 取得目錄
array_pop($parts);
$dir = implode("/", $parts);
echo $dir; // /home/user/documents
?>
處理 URL 查詢字串
<?php
$query = "name=Alice&age=25&city=Taipei";
// 分割成參數
$pairs = explode("&", $query);
$params = [];
foreach ($pairs as $pair) {
[$key, $value] = explode("=", $pair);
$params[$key] = $value;
}
print_r($params);
// ['name' => 'Alice', 'age' => '25', 'city' => 'Taipei']
// 實際上應該使用 parse_str()
parse_str($query, $params);
?>
建立 SQL IN 條件
<?php
$ids = [1, 2, 3, 4, 5];
// 建立 IN 條件
$inClause = implode(",", $ids);
$sql = "SELECT * FROM users WHERE id IN ($inClause)";
echo $sql;
// SELECT * FROM users WHERE id IN (1,2,3,4,5)
// 對於字串,需要加引號
$names = ['Alice', 'Bob', 'Charlie'];
$quoted = array_map(fn($n) => "'$n'", $names);
$inClause = implode(",", $quoted);
$sql = "SELECT * FROM users WHERE name IN ($inClause)";
// 注意:實際應用中應該使用預處理語句避免 SQL Injection
?>
處理標籤
<?php
// 使用者輸入的標籤
$input = "PHP, JavaScript, Python , Ruby";
// 清理並分割
$tags = explode(",", $input);
$tags = array_map('trim', $tags);
$tags = array_filter($tags); // 移除空值
$tags = array_unique($tags); // 移除重複
print_r($tags);
// ['PHP', 'JavaScript', 'Python', 'Ruby']
// 轉回字串儲存
$tagString = implode(",", $tags);
?>
處理多行文字
<?php
$text = "Line 1\nLine 2\nLine 3";
// 分割成行
$lines = explode("\n", $text);
// 處理每一行
$processed = array_map(fn($line) => "- $line", $lines);
// 合併
echo implode("\n", $processed);
// - Line 1
// - Line 2
// - Line 3
?>
反轉單字順序
<?php
$str = "Hello World PHP";
$words = explode(" ", $str);
$reversed = array_reverse($words);
$result = implode(" ", $reversed);
echo $result; // PHP World Hello
?>
首字母縮寫
<?php
function getInitials(string $name): string {
$words = explode(" ", $name);
$initials = array_map(fn($w) => strtoupper($w[0]), $words);
return implode("", $initials);
}
echo getInitials("John Doe"); // JD
echo getInitials("Alice Bob Charlie"); // ABC
?>
注意事項
空分隔符
<?php
// explode 不能使用空分隔符
// $arr = explode("", "Hello"); // 錯誤!
// 使用 str_split 代替
$arr = str_split("Hello");
print_r($arr);
// ['H', 'e', 'l', 'l', 'o']
?>
連續分隔符
<?php
$str = "a,,b,,c";
$arr = explode(",", $str);
print_r($arr);
// ['a', '', 'b', '', 'c'](包含空字串)
// 使用 array_filter 移除空值
$arr = array_filter(explode(",", $str), fn($v) => $v !== '');
print_r(array_values($arr));
// ['a', 'b', 'c']
?>
關聯陣列
<?php
$arr = ['name' => 'Alice', 'age' => 25];
// implode 只使用值,忽略鍵
echo implode(", ", $arr); // Alice, 25
// 如果需要包含鍵
$pairs = [];
foreach ($arr as $key => $value) {
$pairs[] = "$key=$value";
}
echo implode("&", $pairs); // name=Alice&age=25
// 使用 http_build_query 更方便
echo http_build_query($arr); // name=Alice&age=25
?>
與其他函數比較
| 函數 | 說明 |
|---|---|
explode() | 用字串分割 |
preg_split() | 用正規表示式分割 |
str_split() | 按長度分割成字元陣列 |
implode() / join() | 用分隔符合併陣列 |
<?php
$str = "a1b2c3d";
// explode 只能用固定分隔符
// preg_split 可以用正規表示式
$arr = preg_split('/\d/', $str);
print_r($arr);
// ['a', 'b', 'c', 'd']
?>