我有以下方法可以返回注册用户列表:
$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 }}
对于任何寻求简单、单行、与框架无关的解决方案的人:
$initials = preg_filter('/[^A-Z]/', '', $str);
Run Code Online (Sandbox Code Playgroud)
像这样的东西应该有效:
\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);\nRun Code Online (Sandbox Code Playgroud)\n\n输出:\n\narray(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}\nRun Code Online (Sandbox Code Playgroud)\n\n请注意 mb_substr 的使用,而不是常规 substr 或字符串索引。这将为以非 ASCII 字符开头的名称返回正确的值,例如“\xc3\x89mile”
\n\narray(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}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5171 次 |
| 最近记录: |