在用戶列表、頭像佔位符、郵件簽名等場景,常需從英文全名提取首字母縮寫。本文提供簡潔、健壯的 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.
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.
$fullName = 'Jonathan Smith';
$signature = "Best regards,\n{$fullName}\n{$getInitials($fullName)}";
// Best regards,
// Jonathan Smith
// J.S.
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);
將 getInitials() 放入公共工具類/Helper,全項目復用,保證輸出格式統一。