文件系統函數
| 函數 | 用途 | 關鍵點 |
file_exists($path) | 檢查文件/目錄是否存在 | 返回 bool;受 open_basedir 限制 |
dirname($path) | 返回目錄部分 | dirname(__FILE__) 獲取當前腳本目錄(PHP 5.3+ 推薦 __DIR__) |
file($path) | 整文件讀入數組(每行一元素含換行符) | 大文件慎用,記憶體壓力大 |
file_get_contents($path) | 整文件讀入字符串 | 支援 offset/maxlen(PHP 5.1+),性能優於 file() |
字符串處理函數
| 函數 | 用途 | 關鍵點 |
preg_split($pattern, $subject, $limit=-1) | 正則分割字符串為數組 | limit 限制分割片數;PREG_SPLIT_NO_EMPTY 過濾空元素 |
implode($glue, $pieces) | 數組元素拼接為字符串 | 別名 join();$glue 預設空字符串 |
str_replace($search, $replace, $subject, &$count=null) | 字符串替換(區分大小寫) | $search/$replace 可為數組;不區分大小寫用 str_ireplace() |
substr_compare($main, $part, $offset, $length=null, $case_ins=false) | 從偏移位置比較子串 | 返回 0/正/負;$case_ins=true 忽略大小寫 |
strcasecmp($s1, $s2) | 不區分大小寫比較兩字符串 | 返回 0/<0/>0;二進制安全 |
正則表達式函數(PCRE)
| 函數 | 用途 | 關鍵差異 |
preg_match($pattern, $subject, &$matches=null, $flags=0, $offset=0) | 單次匹配,停在首個 | $matches[0] 全匹配,[1] 第一個捕獲組 |
preg_match_all($pattern, $subject, &$matches, $flags=PREG_PATTERN_ORDER) | 全局匹配所有 | PREG_SET_ORDER 調整輸出結構;返回匹配次數 |
preg_replace($pattern, $replace, $subject, $limit=-1, &$count=null) | 正則替換 | $replace 可用 $1 反向引用;$limit 限制替換次數 |
棄用提醒:ereg()/eregi()(POSIX 正則)已在 PHP 7.0 移除,請全面遷移至 PCRE(preg_* 系列)。
數組操作函數
| 函數 | 用途 | 備註 |
extract($array, $flags=EXTR_OVERWRITE, $prefix='') | 將關聯數組鍵值導入符號表為變量 | EXTR_PREFIX_ALL 等標誌控制衝突行為;EXTR_REFS 引用導入 |
usort($array, $callback) | 用戶自定義比較函數排序(重建數字鍵) | 回調返回 <0/0/>0;uasort() 保持關聯鍵 |
uksort($array, $callback) | 按鍵名用戶自定義排序 | 同 usort 但比較鍵而非值 |
實用組合技巧
<?php
// 1. 讀取 CSV -> 數組 -> 過濾空行 -> 重建索引
$data = array_filter(array_map('str_getcsv', file('data.csv')), function($row) {
return array_filter($row); // 移除空字段
});
$data = array_values($data); // 重建 0..N 索引
// 2. 多字段排序(usort 閉包)
usort($users, function($a, $b) {
$cmp = strcmp($a['lastname'], $b['lastname']);
return $cmp ?: strcmp($a['firstname'], $b['firstname']);
});
// 3. 安全導入變量(避免 extract 污染作用域)
$allowed = ['title', 'content', 'author'];
$vars = array_intersect_key($_POST, array_flip($allowed));
// 現在 $vars 只有白名單字段,可安全 extract($vars, EXTR_PREFIX_ALL, 'in')
?>
性能與陷阱提示
- 大文件讀取:優先
fopen() + fgets() 流式處理,避免 file()/file_get_contents() 佔滿內存。
- 正則效能:能用
strpos()/str_replace() 解決的不要用正則;必須用正則時預編譯複用 $re = '/pattern/'; preg_match($re, ...)。
- extract() 風險:易覆蓋現有變量、引入不可控符號,模板引擎外禁用,若必須用請加
EXTR_PREFIX_ALL。
- 排序穩定性:PHP 排序不穩定(相等元素相對位置可能變),多鍵排序需在回調中一次性比較完所有字段。