使用php explode()时未定义的偏移量

时间:2009-11-27 10:11:12

标签: php explode

我写过我认为非常简单地使用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,但他们的示例使用与上面相同的语法。 我想我明白了未定义的偏移是什么,但我不明白为什么我的代码会产生错误!

7 个答案:

答案 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)

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

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