我有这个:
list($firstname, $lastname) = explode(' ', $queryString);
Sometiems $ lastname没有定义,而且我在那里得到未定义的偏移量错误。
因为找不到任何要放在$ lastname中的内容,我猜。
爆炸后()我有:
if(!$lastname) { $lastname = $firstname; }
所以我的问题是,如果没有定义$ lastname,我怎么能把它定义为$ firstname(如果你只写'Adam'而不是'Adam Thompson',应该定义lastname,这样'Adam Adam')
它现在为我做了这个,但我收到了偏移错误
答案 0 :(得分:31)
list($firstname, $lastname) = array_pad(explode(' ', $queryString, 2), 2, null);
2
中的explode()
确保最多 2个值且array_pad()
确保至少 2个值。如果没有空格字符,则
$lastname
为null
。这可以用来决定接下来会发生什么
$lastname = is_null($lastname) ? $firstname : $lastname;
小更新:对于这个特定情况,你可以使用一个小技巧
list($firstname, $lastname) = array_pad(explode(' ', $queryString, 2), 2, $queryString);
这将一步完成所有这些。它应该工作,因为
$firstname
)$queryString == $firstname
。现在是用于填充数组最多2个值的值(正好是一个,因为我们已经有一个值)$queryString
,因为我们已经有两个值至少为了便于阅读,我更喜欢第一个更明显的解决方案。
答案 1 :(得分:3)
尝试添加空格:
list($firstname, $lastname) = explode(' ', $queryString . ' ' );
之后不应该改变一件事。
答案 2 :(得分:1)
您没有收到错误,而是通知。
虽然这是可接受的,因为PHP是一种动态语言,您可以使用isset()
来阻止它:
if(!isset($lastname)) {
$lastname = $firstname;
}
根据评论,list()
是通知的罪魁祸首。在这种情况下,当list()
没有产生适当数量的参数时,我不建议使用explode()
。
如果必须, brady 或undefined offset when using php explode() 的答案可以工作。虽然在我看来它很漂亮丑陋。我相信如果您只是执行以下操作,您的代码会更加直观:
$name = explode(' ', $queryString);
if (isset($name[1])) {
// show lastname
}
else {
// show firstname
}
答案 3 :(得分:1)
我今天刚遇到这个。我的解决方案不是上面的, (这没有效果)我的如下:
while (!feof($fh))
{
$line = fgets($fh);
print $line;
}
而不是:
while ($line = fgets($fh))
{
print $line;
}
答案 4 :(得分:0)
我不清楚为什么会这样,但通知会消失。首先,使用此代码,我得到未定义的偏移通知:
list($month, $day, $year)=explode('-', $dateToChange, 3);
但是,使用此代码,我不会:
list($month, $day, $year, $junk)=explode('-', $dateToChange.'---', 4);
另请注意,在$ dateToChange附加' - '或' - '后,我会收到偏移通知。它需要三个破折号才能在我的例子中用四个变量消失。 $ junk包含两个破折号(一个是分隔符)。