我写过我认为非常简单的使用php explode()函数将名称拆分为forename和surname:

// split name into first and last
$split = explode(' ', $fullname, 2);
$first = $split[0];
$last = $split[1];

但是,这会导致错误消息" Undefined offset:1" 。该功能似乎仍然有效,但我想清理导致错误的任何内容。我查看了 php手册,但他们的示例使用的语法与以上。 我想我明白了未定义的偏移是什么,但我不明白为什么我的代码会产生错误!

有帮助吗?

解决方案

这是因为您的全名不包含空格。您可以使用一个简单的技巧来确保空间总是在哪里

 $split = explode(' ', "$fullname ");

(注意引号内的空格)

顺便说一下,您可以使用list()函数来简化代码

  list($first, $last) = explode(' ', "$fullname ");

其他提示

这可能是因为 $ fullname 不包含空格字符。

此示例应解决您的问题,而不显示此通知:

$split = explode(' ', $fullname, 2);
$first = @$split[0];
$last = @$split[1];

现在,如果 $ fullname " musoNic80" ,您将不会收到通知消息。

请注意使用" @" 字符。

HTH 利亚

BTW,该算法不会一直有效。想想两个单词的拉丁或意大利姓氏名称,如“De Castro”,“Dela Cruz”,“La Rosa”等.Split将返回3而不是2个单词:

Array {
  [0] => 'Pedro'
  [1] => 'De'
  [1] => 'Castro'
}

你最终会得到像“欢迎回来Ana De”这样的消息。或“编辑Monsour La的档案”。

对于像“安妮·玛丽·米勒”,“威廉·霍华德·塔夫脱”等两个单词的名字也会发生同样的事情。

只是一个提示。

据推测,无论 $ fullname 是什么,都不包含空格,所以 $ split 是一个包含单个元素的数组,所以 $ split [1] 指的是未定义的偏移量。

那很奇怪,这里的工作正常。当我尝试使用字符串时,cat walk 并且只是 将会执行并且不会产生错误。我用 print_r

输出了它

当您收到错误时,您的 $ fullname 是什么样的?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top