我写过我认为非常简单地使用php explode()
函数将名称拆分为forename和surname:
// split name into first and last
$split = explode(' ', $fullname, 2);
$first = $split[0];
$last = $split[1];
但是,这会导致错误消息"Undefined offset: 1"
。该功能似乎仍然有效,但我想清理导致错误的任何内容。我检查了php manual,但他们的示例使用与上面相同的语法。
我想我明白了未定义的偏移是什么,但我不明白为什么我的代码会产生错误!
答案 0 :(得分:37)
这是因为您的全名不包含空格。您可以使用一个简单的技巧来确保空间总是在哪里
$split = explode(' ', "$fullname ");
(注意引号内的空格)
顺便说一下,您可以使用list()函数来简化代码
list($first, $last) = explode(' ', "$fullname ");
答案 1 :(得分:4)
这可能是因为$fullname
不包含空格字符。
此示例应解决您的问题,而不显示此通知:
$split = explode(' ', $fullname, 2);
$first = @$split[0];
$last = @$split[1];
如果$fullname
为"musoNic80"
,您将不会收到通知消息。
请注意使用"@"
个字符。
HTH 利亚
答案 2 :(得分:4)
Array {
[0] => 'Pedro'
[1] => 'De'
[1] => 'Castro'
}
您最终会收到“欢迎回Ana De”或“编辑Monsour La的个人资料”等消息。
对于像“安妮玛丽米勒”,“威廉霍华德塔夫脱”等两个字这样的名字也会发生同样的事情。
只是一个提示。
答案 3 :(得分:2)
据推测,无论$fullname
是什么都不包含空格,因此$split
是包含单个元素的数组,因此$split[1]
指的是未定义的偏移量。
答案 4 :(得分:1)
array_pad
是此主题中唯一有效的答案,其他所有主题都是丑陋的骇客,它们可能会爆炸到您的脸上。使用array_pad
,您可以始终确保元素数量正确且已填充。
与list()
类型的输出配合使用时尤其重要。
答案 5 :(得分:0)
那很奇怪,这里的工作正常。当我尝试使用字符串the cat walks
时,只有the
会执行并且不会产生错误。我用print_r
当您收到错误时,$fullname
看起来是什么样的?
答案 6 :(得分:0)
使用array_pad
e.q .:
$split = array_pad(explode(' ', $fullname), 2, null);
explode
会将您的字符串分割成一个没有任何限制的数组。array_pad
如果条目少于null
,则将用2
值填充爆炸数组。请参见array_pad