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

PHP 獲取英文姓名首字母縮寫(如 John Doe → J.D.)

     編輯:PHP 綜合知識

在用戶列表、頭像佔位符、郵件簽名等場景,常需從英文全名提取首字母縮寫。本文提供簡潔、健壯的 PHP 實現,支援多單詞、去除多餘空格、統一大寫輸出。

核心函數

function getInitials(string $name): string {
    // 1. 去除首尾空格,多個空格合併為一個
    $name = preg_replace('/\s+/', ' ', trim($name));
    if ($name === '') return '';

    // 2. 按空格分割單詞
    $words = explode(' ', $name);

    // 3. 取每個單詞首字母,大寫,加點
    $initials = array_map(fn($w) => strtoupper($w[0]) . '.', $words);

    // 4. 連接
    return implode('', $initials);
}

// 測試
echo getInitials('John Doe');           // J.D.
echo getInitials('  Alice   Bob Carol '); // A.B.C.
echo getInitials('single');             // S.
echo getInitials('');                   // (空字符串)

進階版:支援中間名縮寫、連字符、撇號

function getInitialsAdvanced(string $name): string {
    $name = trim($name);
    if ($name === '') return '';

    // 分割:空格、連字符、撇號視為單詞分隔
    $words = preg_split('/[\s\-\']+/', $name, -1, PREG_SPLIT_NO_EMPTY);

    $initials = [];
    foreach ($words as $word) {
        // 取首個字母字符(跳過可能的標點)
        if (preg_match('/[A-Za-z]/', $word, $m)) {
            $initials[] = strtoupper($m[0]) . '.';
        }
    }
    return implode('', $initials);
}

// 測試
echo getInitialsAdvanced("Jean-Paul O'Connor"); // J.P.O.
echo getInitialsAdvanced("Mary-Jane Watson");   // M.J.W.

應用場景示例

1. 頭像佔位符生成(配合顏色哈希)

function avatarPlaceholder(string $name, int $size = 100): string {
    $initials = getInitials($name) ?: '?';
    $bgColor = sprintf('#%06X', crc32($name) & 0xFFFFFF); // 根據名字生成固定顏色
    $fgColor = (hexdec(substr($bgColor, 1)) > 0xFFFFFF/2) ? '#000' : '#fff'; // 對比色
    return "<div style='width:{$size}px;height:{$size}px;background:{$bgColor};color:{$fgColor};border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:" . ($size/2) . "px;font-weight:bold;'>$initials</div>";
}
echo avatarPlaceholder('John Doe'); // 圓形彩色頭像,顯示 J.D.

2. 郵件簽名自動生成

$fullName = 'Jonathan Smith';
$signature = "Best regards,\n{$fullName}\n{$getInitials($fullName)}";
// Best regards,
// Jonathan Smith
// J.S.

3. 數據庫查詢優化:首字母索引

ALTER TABLE users ADD COLUMN initials CHAR(10) GENERATED ALWAYS AS (
    CONCAT(UPPER(SUBSTRING_INDEX(TRIM(name), ' ', 1), 1), '.',
           IF(LOCATE(' ', TRIM(name)) > 0, UPPER(SUBSTRING_INDEX(TRIM(name), ' ', -1), 1), ''), '.')
) STORED;
CREATE INDEX idx_initials ON users (initials);

注意事項

  • 編碼:確保 PHP 文件、數據庫連接、頁面均為 UTF-8,避免多字節字符截取亂碼。
  • 非 ASCII 名字:中文/日文/韓文名無「首字母」概念,需單獨處理(如取拼音首字母、漢字首字)。
  • 邊界:全空格、空字符串、單字母名(如 "A B" → A.B.)。

將 getInitials() 放入公共工具類/Helper,全項目復用,保證輸出格式統一。

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