Подтвердить что ты не робот

Undefined смещение при использовании php explode()

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

НТН Элиас

Ответ 3

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

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

У вас появятся сообщения типа "Добро пожаловать назад Ana De" или "Редактирование профиля Monsour La".

То же самое произойдет для двухсловных имен, таких как "Anne Marie Miller", "William Howard Taft" и т.д.

Просто подсказка.

Ответ 4

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

Ответ 5

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

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

Ответ 6

Использовать array_pad

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

  • explode разделит вашу строку на массив без каких-либо ограничений.
  • array_pad заполнит разобранный массив null значениями, если в нем меньше 2 записей.

Смотрите array_pad

Ответ 7

array_pad - единственный верный ответ в этой теме, все остальные - безобразные хаки, которые могут взорваться вам в лицо. С array_pad вы всегда можете быть уверены, что количество элементов правильное и заполненное. Особенно важно при использовании с выходом типа list().