2009-11-27 1 views
14

Я написал то, что я думал, было очень простое использование функции PHP explode() разделить имя на имя и фамилия:не определено смещение при использовании PHP взорваться()

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

Однако это бросание вверх ошибка php с сообщением "Undefined offset: 1". Функция все еще работает, но я хотел бы прояснить все, что вызывает ошибку. Я проверил php manual, но их примеры используют тот же синтаксис, что и выше. Я думаю, что понимаю, что такое неопределенное смещение, но я не понимаю, почему мой код генерирует ошибку!

+8

Можете ли вы указать значение '$ fullname', которое даст вам ошибку? –

ответ

36

Это потому, что ваше полное имя не содержит пробела. Вы можете использовать простой трюк, чтобы убедиться, что пространство всегда где

$split = explode(' ', "$fullname "); 

(обратите внимание на пробел внутри кавычек)

Кстати, вы можете использовать список() для упрощения вашего кода

list($first, $last) = explode(' ', "$fullname "); 
+5

+1 для использования 'list()'. – jensgram

+0

Это здорово. Я не понимал, что могу поставить переменную внутри кавычек. Кроме того, спасибо за подсказку «list()». – musoNic80

+0

Довольно элегантный хак. ;) – Gustav

2

Предположительно, независимо от того, что $fullname не содержит пробела, поэтому $split представляет собой массив, содержащий один элемент, поэтому $split[1] относится к неопределенному смещению.

3

Это может быть связано с тем, что $fullname не содержал пробел.

Этот пример должен решить вашу проблему без отображения этого уведомления:

$split = explode(' ', $fullname, 2); 
$first = @$split[0]; 
$last = @$split[1]; 

Теперь, если $fullname является "musoNic80" вы не получите сообщение уведомления.

Обратите внимание на использование символов "@".

НТН Элиас

+3

Имеет смысл, но я лучше найду способ решить проблему, а не подавить ошибки. Спасибо, хотя для объяснения причины! – musoNic80

0

Вот странно, он здесь работает правильно. Когда я попробую со строкой the cat walks, а также просто the сделает и не произведет ошибку. Я вывел его с print_r

Ваш $fullname выглядит, когда вы получите сообщение об ошибке?

+0

с print_r Я получаю нормальный массив .. – Ben

4

Кстати, этот алгоритм не будет работать все время. Подумайте о двух слов Latina или итальянских фамилий имен, как «Де Кастро», «Dela Cruz», «La Rosa», и т.д. Split будет возвращать 3 вместо 2-х слов:

Array { 
    [0] => 'Pedro' 
    [1] => 'De' 
    [1] => 'Castro' 
} 

Вы будете в конечном итоге с такие как «Добро пожаловать назад Ana De» или «Редактирование профиля Monsour La».

То же самое произойдет и имена двух слов, как «Энн Мари Миллер», «Уильям Говард Тафт» и т.д.

Только наконечник.