PHP:爆炸中的未定义偏移量()

Kar*_*rem 9 php offset

我有这个:

list($firstname, $lastname) = explode(' ', $queryString);
Run Code Online (Sandbox Code Playgroud)

Sometiems $ lastname没有被定义,并且它在那里我得到未定义的偏移错误.

因为它无法找到任何东西放在$ lastname中,我猜.

爆炸后()我有:

if(!$lastname) { $lastname = $firstname; }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如果没有定义$ lastname,我怎么能将它定义为$ firstname(如果你只写'Adam'而不是'Adam Thompson',应该定义lastname,这样'Adam Adam')

它现在为我做了这个,但我收到了偏移错误

Kin*_*nch 31

list($firstname, $lastname) = array_pad(explode(' ', $queryString, 2), 2, null);
Run Code Online (Sandbox Code Playgroud)

2explode()确保,有至多 2个值和array_pad()保证,存在至少 2倍的值.如果没有空格字符, $lastname就是null.这可以用来决定接下来会发生什么

$lastname = is_null($lastname) ? $firstname : $lastname;
Run Code Online (Sandbox Code Playgroud)

小更新:对于这个特定情况,你可以使用一个小技巧

list($firstname, $lastname) = array_pad(explode(' ', $queryString, 2), 2, $queryString);
Run Code Online (Sandbox Code Playgroud)

这将一步完成所有这些.它应该工作,因为

  • 总是至少有一个值(for $firstname)
  • 如果有一个值,那么$queryString == $firstname.现在是用于填充数组最多2个值的值(这正是一个值,因为我们已经有一个值)
  • 如果有两个值,则表示数组未填充$queryString,因为我们已经有2个值

至少为了便于阅读,我更喜欢第一个更明显的解决方案.