仅在第一个和最后一个空格上拆分字符串

问题描述 投票:0回答:5

我希望用户在一个字段中输入他们的全名,以尝试创建一个时尚的用户体验。

$user = 'Robert John Alex Ridly';
$user = explode(' ', $user);

我想分解字符串并将部分分配给变量

$first_name = $user[0];
$middle_names = ?
$last_names = $user[last]?;

问题 A - 在不知道会有多少爆炸“碎片”的情况下,如何瞄准最后一次爆炸?

问题 B - 有没有办法定位第一个和最后一个之间的所有部分,并将它们重新放在一个字符串中,并添加空格?

php explode
5个回答
2
投票
$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

1
投票

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 可能有更好的解决方案。


1
投票

评论中解释的工作示例:

$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)

1
投票

问题A:

您可以使用

$last_name = end($user)
来定位数组中的最后一项。 end() 函数告诉 php 获取数组中的最后一项。

问题B:

您可以使用php中的

array_slice()
函数。

array_slice(数组,开始,长度,保留)

长度:可选。数值。指定返回的长度 大批。如果该值设置为负数,该函数将 停止从距离最后一个元素那么远的地方进行切片。如果没有设置该值, 该函数将返回从设置的位置开始的所有元素 通过启动参数。

保留:可选。指定该函数是否应保留或重置键。

所以在你的例子中它是

$middle_names = implode(" ", array_slice($user,1,-1))

W3Schools array_slice()


0
投票

您可以通过使用

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',
)
© www.soinside.com 2019 - 2024. All rights reserved.