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

mus*_*c80 17 php explode

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

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

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

use*_*291 38

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

 $split = explode(' ', "$fullname ");
Run Code Online (Sandbox Code Playgroud)

(注意引号内的空格)

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

  list($first, $last) = explode(' ', "$fullname ");
Run Code Online (Sandbox Code Playgroud)

  • 你需要尽可能多的分裂字符作为分配:例如`list($ size,$ ctype,$ sample,$ desc)= explode(',',$ item.',,,,');`所以它确保你总是得到一个任务 (3认同)

ph.*_*dev 13

array_pad

等式: $split = array_pad(explode(' ', $fullname), 2, null);

  • explode 将您的字符串拆分为一个没有任何限制的数组。
  • array_padnull如果分解的数组少于2条目,则将用值填充分解的数组。

array_pad


Eli*_*any 5

这可能是由于$fullname不包含空格字符所致。

此示例应该可以解决您的问题,而无需显示此通知:

$split = explode(' ', $fullname, 2);
$first = @$split[0];
$last = @$split[1];
Run Code Online (Sandbox Code Playgroud)

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

注意字符的使用"@"

HTH埃利亚斯

  • 有道理,但我宁愿找到解决问题的方法,而不是抑制错误。不过还是谢谢你解释原因! (3认同)