неопределенное смещение при использовании php explode () - PullRequest
17 голосов
/ 27 ноября 2009

Я написал очень простое использование функции php explode() для разделения имени на имя и фамилию:

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

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

Ответы [ 5 ]

37 голосов
/ 27 ноября 2009

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

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

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

Кстати, вы можете использовать функцию list (), чтобы упростить ваш код

  list($first, $last) = explode(' ', "$fullname ");
4 голосов
/ 14 апреля 2011

Кстати, этот алгоритм не будет работать все время. Подумайте о двухсимвольных латинских или итальянских фамилиях, таких как "De Castro", "Dela Cruz", "La Rosa" и т. Д. Split вернет 3 вместо 2 слов:

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

Вы получите сообщения типа «Добро пожаловать, Ана Де» или «Редактирование профиля Monsour La».

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

Просто совет.

4 голосов
/ 27 ноября 2009

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

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

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

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

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

НТН Элиас

2 голосов
/ 27 ноября 2009

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

0 голосов
/ 27 ноября 2009

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

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

...