字串與陣列互轉是資料處理核心環節。PHP 提供多種分割與合併函數,支援固定分隔符、正則模式、固定長度等多樣化需求。
| 函數 | 分割依據 | 回傳類型 | 特性 |
|---|---|---|---|
explode() | 固定字串分隔符 | 陣列 | 最常用、效能最佳 |
preg_split() | 正則表達式 | 陣列 | 支援複雜模式、多種分隔符 |
str_split() | 固定長度 | 陣列 | 按字節/字符切分 |
parse_str() | 查詢字串格式 | 變量/陣列 | 專用於 URL 參數解析 |
<?php
$str = "Welcome to www.example.com!";
$parts = explode('.', $str);
print_r($parts);
/*
Array
(
[0] => Welcome to www
[1] => example
[2] => com!
)
*/
// 限制分割數量 (PHP 5.1+)
$parts = explode('.', $str, 2);
// [0] => Welcome to www, [1] => example.com!
// 負數限制 (PHP 5.1+):排除最後 N 個元素
$parts = explode(',', 'a,b,c,d', -1); // ['a', 'b', 'c']
?>
<?php
// 多種空白字符分割
$str = "a\tb\nc d";
$parts = preg_split('/\s+/', $str); // ['a', 'b', 'c', 'd']
// 保留分隔符 (PREG_SPLIT_DELIM_CAPTURE)
$parts = preg_split('/(\s+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
// ['a', '\t', 'b', '\n', 'c', ' ', 'd']
// 忽略空元素 (PREG_SPLIT_NO_EMPTY)
$parts = preg_split('/,/', 'a,,b,', -1, PREG_SPLIT_NO_EMPTY); // ['a', 'b']
?>
<?php
$str = 'Hello';
// 按字節切分 (每 2 字節)
print_r(str_split($str, 2));
// ['He', 'll', 'o']
// 多位元組安全切分
$str = '中文測試';
print_r(str_split($str, 3)); // 可能截斷字符
// 建議用 mb_str_split (PHP 7.4+) 或自定義函數
?>
<?php
$parts = ['Welcome to', 'www', 'example', 'com!'];
$str = implode('.', $parts); // Welcome to.www.example.com!
$str = join(' | ', $parts); // 別名函數
// 實用:陣列轉 SQL IN 列表
$ids = [1, 2, 3, 4];
$sql = 'SELECT * FROM users WHERE id IN (' . implode(',', $ids) . ')';
// SELECT * FROM users WHERE id IN (1,2,3,4)
?>
<?php
$str = "Welcome to www.example.com!";
// 分割
$arr = explode('.', $str);
// 處理...
// 合併 (不同分隔符)
$newStr = implode('_', $arr);
echo $newStr; // Welcome to www_example_com!
?>
<?php
// 解析 CSV 行 (處理引號、逗號、換行)
$line = 'John,"Doe, Jr.",25,"New York"';
$fields = str_getcsv($line); // ['John', 'Doe, Jr.', '25', 'New York']
// 生成 CSV
$data = [['Name', 'Age'], ['John', 25], ['Jane', 30]];
$fp = fopen('php://memory', 'w');
foreach ($data as $row) fputcsv($fp, $row);
rewind($fp);
echo stream_get_contents($fp);
?>
explode()(最快)preg_split()str_split() / unpack()parse_str()str_getcsv() / fgetcsv()分割與合併是資料流轉換的橋樑,熟練掌握各函數特性能大幅簡化解析與序列化邏輯。