从 PHP 数组中的全名获取缩写
Get Initials From Full Names In PHP Array
我想获取一个名称列表(来自 Wordpress)并获取首字母并用“/”分隔。在大多数情况下,会有 2 个或更多名称。在某些情况下,只有 1 个名称。
例如:
李四
简·亚当斯
迈克尔·麦克唐纳
应该输出:
JD/JA/MD
这是我迄今为止尝试解决的方法。
foreach ( $result as $user )
{
$user_id = $user->user_id1;
$user = get_userdata( $user_id );
$name[] = $user->display_name;
}
$comma_names = implode('/', $name);
$words = explode("/", $comma_names);
$initials = "";
foreach ($words as $w) {
$initials .= $w[0];
}
echo $initials;
显然,这只输出每个名字的第一个字母。我需要在我的循环中使用额外的爆炸吗?
最好的方法是什么?
假设 $words
是一个名称数组(您的代码不是 100% 清楚),您可以使用 preg_match_all
找到每个名称中的第一个字符,然后分解这些值以获得首字母字符串,然后再次内爆所有这些结果以获得所需的字符串。例如:
$words = array(
'John Doe',
'Jane Adams',
'Michael McDonald',
'Jim'
);
$initials = implode('/', array_map(function ($name) {
preg_match_all('/\b\w/', $name, $matches);
return implode('', $matches[0]);
}, $words));
echo $initials;
输出:
JD/JA/MM/J
如果保证名称之间只有一个 space,您可以简化该代码以仅替换名称字符串中前面是单词字符的任何字符:
$initials = implode('/', array_map(function ($name) {
return preg_replace('/(?<=\w)./', '', $name);
}, $words));
示例数据的输出相同。 Demo on 3v4l.org
我想获取一个名称列表(来自 Wordpress)并获取首字母并用“/”分隔。在大多数情况下,会有 2 个或更多名称。在某些情况下,只有 1 个名称。
例如:
李四
简·亚当斯
迈克尔·麦克唐纳
应该输出: JD/JA/MD
这是我迄今为止尝试解决的方法。
foreach ( $result as $user )
{
$user_id = $user->user_id1;
$user = get_userdata( $user_id );
$name[] = $user->display_name;
}
$comma_names = implode('/', $name);
$words = explode("/", $comma_names);
$initials = "";
foreach ($words as $w) {
$initials .= $w[0];
}
echo $initials;
显然,这只输出每个名字的第一个字母。我需要在我的循环中使用额外的爆炸吗?
最好的方法是什么?
假设 $words
是一个名称数组(您的代码不是 100% 清楚),您可以使用 preg_match_all
找到每个名称中的第一个字符,然后分解这些值以获得首字母字符串,然后再次内爆所有这些结果以获得所需的字符串。例如:
$words = array(
'John Doe',
'Jane Adams',
'Michael McDonald',
'Jim'
);
$initials = implode('/', array_map(function ($name) {
preg_match_all('/\b\w/', $name, $matches);
return implode('', $matches[0]);
}, $words));
echo $initials;
输出:
JD/JA/MM/J
如果保证名称之间只有一个 space,您可以简化该代码以仅替换名称字符串中前面是单词字符的任何字符:
$initials = implode('/', array_map(function ($name) {
return preg_replace('/(?<=\w)./', '', $name);
}, $words));
示例数据的输出相同。 Demo on 3v4l.org