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, но я не понимаю, почему мой код генерирует ошибку!
Ответы
Ответ 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()
.