我有下面的方法,返回我的注册用户列表:
$users = \App\Models\User::all();
字符串事实证明,我只想介绍名单上名字的首字母。范例:卡洛斯佩雷拉多纳西曼托=CN马科斯·奥雷利奥=马桑德拉·洛佩斯=SL我如何从列表中获取这些数据?我是否可以只取变量$ name的首字母来处理这个列表?
zfycwa2u1#
您可以使用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]; }
字符串现在,您可以使用{{ $user->initials }}获取初始值
{{ $user->initials }}
insrf1ej2#
这样的东西应该工作:
$names = \App\Models\User::pluck('name'); $initials = []; foreach($names as $name) { $nameParts = explode(' ', trim($name)); $firstName = array_shift($nameParts); $lastName = array_pop($nameParts); $initials[$name] = ( mb_substr($firstName,0,1) . mb_substr($lastName,0,1) ); } var_dump($initials);
输出:
array(1) { ["Carlos Pereira do Nascimento"]=> string(2) "CN" ["Marcos Aurelio"]=> string(2) "MA" ["Émile Durkheim"]=> string(2) "ÉD" }
注意使用mb_substr而不是常规的substr或字符串索引。这将返回以非ASCII字符开头的名称的正确值,例如“Émile”
echo substr('Émile Durkheim', 0, 1); // output: b"Ã" echo 'Émile Durkheim'[0]; // output: b"Ã" echo mb_substr('Émile Durkheim', 0, 1); // output: É
型
nbnkbykc3#
对于任何寻求简单、单行、与框架无关的解决方案的人来说:
$initials = preg_filter('/[^A-Z]/', '', $str);
字符串
oewdyzsn4#
我刚刚做了以下PR,在Laravel框架中引入了一个新的Str::initials() String助手函数:https://github.com/laravel/framework/pull/40381对于那些已经想在接受/合并之前使用它的人,只需在AppServiceProvider的boot()方法中使用这个宏扩展Illuminate\Support\Str:
Str::initials()
AppServiceProvider
boot()
Illuminate\Support\Str
Str::macro('initials', fn($value, $sep = ' ', $glue = ' ') => trim(collect(explode($sep, $value))->map(function ($segment) { return $segment[0] ?? ''; })->join($glue)));
字符串然后只使用Str::initials('Foo Bar')或作为User模型中的Eloquent访问器:
Str::initials('Foo Bar')
User
public function getInitialsAttribute(): string { return \Illuminate\Support\Str::initials($this->name); }
型所以你可以简单地使用像{{ Auth::user()->initials }}这样的东西。
{{ Auth::user()->initials }}
kx5bkwkv5#
只需输入这两行代码
function initials($str) { $ret = ''; foreach (explode(' ', $str) as $word) $ret .= strtoupper($word[0]); return $ret; }
3vpjnl9f6#
我只是想扩展上面的答案,以帮助其他人也这样做。这里有一个关于我所做的事情的例子。在用户模型中创建访问器:
public function getNameInitials() { $name = $this->name; $name_array = explode(' ',trim($name)); $firstWord = $name_array[0]; $lastWord = $name_array[count($name_array)-1]; return mb_substr($firstWord[0],0,1)."".mb_substr($lastWord[0],0,1); }
字符串然后,您可以在视图中以{{ $user->getNameInitials() }}的形式访问它,也可以轻松地访问已验证用户的姓名缩写,如下所示{{ Auth::user()->getNameInitials() }}
{{ $user->getNameInitials() }}
{{ Auth::user()->getNameInitials() }}
hec6srdp7#
在2023年的今天,最优雅的方法是使用Laravel的Fluent String助手:
Str::of('John Doe Smith') ->explode(' ') // Split the name into parts ->map(fn($part) => Str::of($part)->substr(0, 1)->upper()) // Take the first letter and uppercase it ->join(''); // Join the initials together
7条答案
按热度按时间zfycwa2u1#
您可以使用Laravel的访问器来获取修改以下代码的缩写:
字符串
现在,您可以使用
{{ $user->initials }}
获取初始值insrf1ej2#
这样的东西应该工作:
输出:
注意使用mb_substr而不是常规的substr或字符串索引。这将返回以非ASCII字符开头的名称的正确值,例如“Émile”
型
nbnkbykc3#
对于任何寻求简单、单行、与框架无关的解决方案的人来说:
字符串
oewdyzsn4#
我刚刚做了以下PR,在Laravel框架中引入了一个新的
Str::initials()
String助手函数:https://github.com/laravel/framework/pull/40381对于那些已经想在接受/合并之前使用它的人,只需在
AppServiceProvider
的boot()
方法中使用这个宏扩展Illuminate\Support\Str
:字符串
然后只使用
Str::initials('Foo Bar')
或作为User
模型中的Eloquent访问器:型
所以你可以简单地使用像
{{ Auth::user()->initials }}
这样的东西。kx5bkwkv5#
只需输入这两行代码
字符串
3vpjnl9f6#
我只是想扩展上面的答案,以帮助其他人也这样做。
这里有一个关于我所做的事情的例子。
在用户模型中创建访问器:
字符串
然后,您可以在视图中以
{{ $user->getNameInitials() }}
的形式访问它,也可以轻松地访问已验证用户的姓名缩写,如下所示{{ Auth::user()->getNameInitials() }}
hec6srdp7#
在2023年的今天,最优雅的方法是使用Laravel的Fluent String助手:
字符串