首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 核心函數速查手冊:日期、字串、陣列、JSON 與輸出控制

     編輯:PHP 綜合知識

前言

PHP 內建超過 1000 個函數,掌握高頻核心函數是高效開發的關鍵。本文按功能分類整理實戰常用函數,附帶參數說明與最佳實踐。

一、日期時間處理

需求函數/寫法範例輸出備註
當前日期時間date('Y-m-d H:i:s')2024-01-15 14:30:45格式字符見下表
時間戳轉日期date('Y-m-d', $timestamp)2024-01-15
日期字串轉時間戳strtotime('2024-01-15 14:30:00')1705319400支援相對時間
相對時間計算strtotime('+1 week')下週同時間戳'next Monday', 'last day of this month'
微秒級時間microtime(true)1705319445.1234效能測量必備
DateTime 物件 (推薦)(new DateTime())->format('c')2024-01-15T14:30:45+08:00時區安全、鏈式操作
時區處理date_default_timezone_set('Asia/Taipei')—腳本最開頭設定

date() 格式字符速查

Y - 4位年份    y - 2位年份
m - 月份(01-12)  n - 月份(1-12)  M - 縮寫月名  F - 完整月名
d - 日(01-31)   j - 日(1-31)    D - 縮寫週名  l - 完整週名
H - 24時(00-23) h - 12時(01-12) i - 分(00-59) s - 秒(00-59)
a - am/pm       A - AM/PM
c - ISO 8601    r - RFC 2822    U - Unix 時間戳

二、檔案引入與自動載入

語句行為失敗後果適用場景
require編譯階段引入致命錯誤核心依賴、配置檔
require_once僅引入一次致命錯誤類定義、函數庫
include執行階段引入警告模板、可選模組
include_once僅引入一次警告共用片段

現代專案請使用 Composer PSR-4 自動載入,避免手動 require。

三、輸出與格式化

函數用途範例
echo直接輸出,可多參數echo 'A', 'B';
print輸出單值,返回 1print 'Hello';
printf格式化輸出printf('%.2f', 3.14159); → 3.14
sprintf格式化返回字串$sql = sprintf("SELECT * FROM %s WHERE id=%d", 'users', 1);
var_dump結構化除錯輸出含類型、長度
print_r陣列/物件可讀輸出print_r($arr, true) 返回字串
json_encode編碼 JSONJSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES

常用格式化佔位符

  • %s 字串
  • %d 有號整數
  • %f 浮點數 (預設 6 位小數)
  • %.2f 保留 2 位小數
  • %x 十六進位小寫
  • %08x 8 位十六進位前導零

四、字串操作核心函數

分類函數說明範例
長度/編碼strlen位元組長度strlen('中文') === 6 (UTF-8)
mb_strlen字符長度 (需 mbstring)mb_strlen('中文', 'UTF-8') === 2
mb_internal_encoding設定內部編碼mb_internal_encoding('UTF-8')
大小寫strtolower/strtoupperASCII 範圍不支援多位元組
mb_strtolower/mb_strtoupperUnicode 安全指定編碼參數
ucfirst/ucwords首字/各詞首字大寫ucwords('hello world')
查找/替換strpos/strrpos位置 (0-based, false=未找到)if (strpos($hay, $needle) !== false)
stripos不分大小寫
str_replace替換所有 (區分大小寫)str_replace(['{name}'], [$name], $tpl)
str_ireplace不分大小寫替換
切分/合併explode字串→陣列explode(',', 'a,b,c')
implode陣列→字串implode(',', $arr)
preg_split正則切分preg_split('/\s+/', $str)
截取/修飾substr位元組截取substr('abcdef', 2, 3) → 'cde'
mb_substr字符截取支援負索引
trim/ltrim/rtrim去除首尾字符trim($str, "\x00..\x1F") 去控制字符
編碼轉換mb_convert_encoding編碼轉換mb_convert_encoding($str, 'UTF-8', 'BIG5')
HTML 實體htmlspecialchars防 XSS 必備htmlspecialchars($str, ENT_QUOTES, 'UTF-8')
格式化數字number_format千分位、小數位number_format(1234.5, 2, '.', ',') → '1,234.50'

五、陣列操作大全

建立與基本屬性

$arr = ['k0' => 'a', 'k1' => 'b', 'k2' => 'c'];
count($arr);           // 3
array_keys($arr);      // ['k0','k1','k2']
array_values($arr);    // ['a','b','c'] (重新索引)
array_key_exists('k1', $arr); // true
in_array('b', $arr);   // true (值搜尋)

指標操作 (內部指標)

current($arr);  // 'a'
next($arr);     // 'b'
prev($arr);     // 'a'
end($arr);      // 'c'
reset($arr);    // 'a'
key($arr);      // 當前鍵
each($arr);     // ['key'=>'k0','value'=>'a',0=>'k0',1=>'a'] 並前進

增刪改 (修改原陣列)

函數操作返回值鍵名行為
array_push尾部推入新長度數字鍵遞增
array_pop尾部彈出彈出值—
array_unshift頭部推入新長度數字鍵重排,字串鍵不變
array_shift頭部彈出彈出值數字鍵重排
array_splice切片替換被移除元素可插入/刪除/替換

排序 (全部修改原陣列,返回 bool)

函數排序依據鍵名保留
sort值升序否 (重排 0...)
rsort值降序否
asort值升序是
arsort值降序是
ksort鍵升序是
krsort鍵降序是
natsort自然排序是
shuffle隨機打亂否

進階操作 (返回新陣列,不修改原陣列)

array_merge($a, $b);           // 合併 (數字鍵重排,字串鍵後蓋前)
array_combine($keys, $values); // 鍵值組合成關聯陣列
array_slice($arr, 2, 3);       // 切片 (保留鍵名需第4參數 true)
array_chunk($arr, 2, true);    // 分塊
array_unique($arr);            // 去重 (保留首次出現鍵名)
array_filter($arr, fn($v)=>$v>0); // 過濾
array_map(fn($v)=>$v*2, $arr);    // 映射
array_reduce($arr, fn($c,$v)=>$c+$v, 0); // 歸約求和
array_column($users, 'name');      // 提取欄位
array_keys($arr, 'value');         // 反向搜尋鍵名

陣列運算

$a + $b;        // 聯集 (左優先保留鍵名)
array_diff($a, $b);   // 差集 (值比較)
array_intersect($a, $b); // 交集 (值比較)
array_diff_key($a, $b);  // 鍵名差集

六、JSON 處理最佳實踐

$data = ['id' => 1, 'name' => '中文', 'tags' => ['a', 'b']];

// 編碼
$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR);
// {"id":1,"name":"中文","tags":["a","b"]}

// 解碼為關聯陣列 (推薦)
$arr = json_decode($json, true, 512, JSON_THROW_ON_ERROR);

// 解碼為物件
$obj = json_decode($json, false, 512, JSON_THROW_ON_ERROR);
// $obj->name

// 錯誤處理 (PHP 7.3+ JSON_THROW_ON_ERROR 拋出 JsonException)
try {
    $data = json_decode($invalidJson, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    log_error('JSON 解析失敗: ' . $e->getMessage());
}

七、效能微優化提醒

  • isset($arr['key']) 比 array_key_exists('key', $arr) 快 (語言結構 vs 函數)
  • in_array 大陣列 O(n);頻繁查找請改 isset($lookup[$val]) 或 array_flip 後查鍵
  • array_push($arr, $v) 比 $arr[] = $v 慢 (函數調用開銷)
  • 大量字串拼接用 implode 或 sprintf,避免循環 .=
  • 啟用 OPcache,預編譯腳本大幅降低函數調用開銷

結語

熟練運用核心函數是 PHP 開發者的基本功。建議將本文作為桌邊速查,遇到陌生函數優先查閱 PHP 官方手冊,注意版本差異與棄用提醒。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved