获取php中唯一名字和姓氏的首字母

时间:2020-08-06 16:56:16

标签: php arrays string character

我只想显示用户名字的首字母和姓氏的首字母。 (测试用户= TU)

即使用户输入前缀或中间名,如何获得此结果? (先生测试中间名用户= TU)。

这是我到目前为止的代码(但根据用户输入,将显示2个以上的字母):

public function initials() {
    $words = explode(" ", $this->name );
    $initials = null;
    foreach ($words as $w) {
        $initials .= $w[0];
    }
    return strtoupper($initials);
}

2 个答案:

答案 0 :(得分:4)

变化太多,但这应该捕获字符串中的名字和姓氏,这些字符串可能带有也可能没有以句点结尾的前缀或后缀:

public function initials() {
    preg_match('/(?:\w+\. )?(\w+).*?(\w+)(?: \w+\.)?$/', $this->name, $result);
    return strtoupper($result[1][0].$result[2][0]);
}

$result[1]$result[2]是第一个和最后一个捕获组,每个捕获组的[0]索引是字符串的第一个字符。

查看Example

这做得很好,但是其中带有空格的名称将仅返回第二部分,例如De Jesus将仅返回Jesus。您可以为de, von, van等姓氏添加已知的修饰语,但是很幸运地将它们全部捕获,尤其是van de, van der, van den更长的时候。

要将其扩展为非英语前缀和后缀,您可能需要定义它们并去除它们,因为某些前缀可能不会在句号中结束。

$delete = ['array', 'of prefixes', 'and suffixes'];
$name = str_replace($delete, '', $this->name);

//or just beginning ^ and end $
$prefix = ['array', 'of prefixes'];
$suffix = ['array', 'of suffixes'];
$name = preg_replace("/^$prefix|$suffix$/", '', $this->name);

答案 1 :(得分:2)

您可以使用reset()end()来实现

reset()将数组的内部指针后退到第一个元素,并返回第一个数组元素的值。

end()将数组的内部指针前进到最后一个元素,并返回其值。

def parts_sums(ls):
    if len(ls) == 0: return [0]
    ret = [sum(ls)]
    ret.extend(parts_sums(ls[1:]))
    return ret