如何使用 Laravel 从姓名中提取首字母缩写

Ama*_*aRJ 2 string laravel

我有以下方法可以返回注册用户列表:

$users = \App\Models\User::all();
Run Code Online (Sandbox Code Playgroud)

事实证明,我只想展示该名单上名字的首字母。

例子:

卡洛斯·佩雷拉·多·纳西门托 = CN

马科斯·奥雷里奥 = MA

桑德拉·洛佩斯 = SL

我怎样才能通过从列表中获取这些数据来做到这一点?

我是否可以通过仅采用变量 $ 名称的首字母来处理此列表?

小智 6

您可以使用Laravel 的访问器来获取缩写,修改以下代码:

public function getInitialsAttribute(){
    $name = 'Carlos Pereira do Nascimento';
    $name_array = explode(' ',trim($name));

    $firstWord = $name_array[0];
    $lastWord = $name_array[count($name_array)-1];

    return $firstWord[0]."".$lastWord[0];
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用以下命令获取缩写{{ $user->initials }}


Dan*_*kim 6

对于任何寻求简单、单行、与框架无关的解决方案的人:

$initials = preg_filter('/[^A-Z]/', '', $str);
Run Code Online (Sandbox Code Playgroud)

  • 这将返回所有大写字母。“测试用户”将返回“TU”,而“另一个伟大的测试用户”将返回“ATU”。这对于某些用例来说可能就足够了。 (2认同)

Kaa*_*aan 5

像这样的东西应该有效:

\n\n
$names = \\App\\Models\\User::pluck(\'name\');\n$initials = [];\nforeach($names as $name) {\n    $nameParts = explode(\' \', trim($name));\n    $firstName = array_shift($nameParts);\n    $lastName = array_pop($nameParts);\n    $initials[$name] = (\n        mb_substr($firstName,0,1) .\n        mb_substr($lastName,0,1)\n    );\n}\n\nvar_dump($initials);\n
Run Code Online (Sandbox Code Playgroud)\n\n输出:\n\n
array(1) {\n  ["Carlos Pereira do Nascimento"]=>\n  string(2) "CN"\n  ["Marcos Aurelio"]=>\n  string(2) "MA"\n  ["\xc3\x89mile Durkheim"]=>\n  string(2) "\xc3\x89D"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意 mb_substr 的使用,而不是常规 substr 或字符串索引。这将为以非 ASCII 字符开头的名称返回正确的值,例如“\xc3\x89mile”

\n\n
array(1) {\n  ["Carlos Pereira do Nascimento"]=>\n  string(2) "CN"\n  ["Marcos Aurelio"]=>\n  string(2) "MA"\n  ["\xc3\x89mile Durkheim"]=>\n  string(2) "\xc3\x89D"\n}\n
Run Code Online (Sandbox Code Playgroud)\n