我希望用户在一个字段中输入他们的全名,以尝试创建一个时尚的用户体验。
$user = 'Robert John Alex Ridly';
$user = explode(' ', $user);
我想分解字符串并将部分分配给变量
$first_name = $user[0];
$middle_names = ?
$last_names = $user[last]?;
问题 A - 在不知道会有多少爆炸“碎片”的情况下,如何瞄准最后一次爆炸?
问题 B - 有没有办法定位第一个和最后一个之间的所有部分,并将它们重新放在一个字符串中,并添加空格?
$user = explode(" ", $user); // create the array
$first_name = array_shift($user); // gets first element
$last_names = array_pop($user); // gets last element
$middle_names = implode(" ", $user); // re-unites the rest
A.你可以使用
end()
end() 将数组的内部指针前进到最后一个元素,并返回其值。
B.你可以做类似的事情
foreach ($exploded as $key=>$value) {
if ($key == 0 || $key == (count($exploded) -1)) continue;
$middle_name_array[] = $value;
}
$middle_name = implode(' ', $middle_name_array);
问题 B 可能有更好的解决方案。
评论中解释的工作示例:
$user = 'Robert John Alex Ridly';
$user = explode(' ', $user);
// Gets first element in $user
$first_name = array_shift($user);
// Gets last element in $user (A)
$last_name = array_pop($user);
// Assign remaining names (B)
$middle_names = implode(" ", $user); // Or just assign $users array (It will only contain those middle names at this point)
问题A:
您可以使用
$last_name = end($user)
来定位数组中的最后一项。 end() 函数告诉 php 获取数组中的最后一项。
问题B:
您可以使用php中的
array_slice()
函数。
array_slice(数组,开始,长度,保留)
长度:可选。数值。指定返回的长度 大批。如果该值设置为负数,该函数将 停止从距离最后一个元素那么远的地方进行切片。如果没有设置该值, 该函数将返回从设置的位置开始的所有元素 通过启动参数。
保留:可选。指定该函数是否应保留或重置键。
所以在你的例子中它是
$middle_names = implode(" ", array_slice($user,1,-1))
您可以通过使用
preg_split()
来定位输入字符串中第一个和最后一个出现的空格,从而避免多个数组操作。 演示
$user = 'Robert John Alex Ridly';
//$user = 'Robert Downey Jr.';
//$user = 'Robert Plant';
//$user = 'Robert';
var_export(preg_split('/^\S+\K | (?=\S+$)/', $user, 0, PREG_SPLIT_NO_EMPTY));
array (
0 => 'Robert',
1 => 'John Alex',
2 => 'Ridly',
)