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

StackOverflow https://stackoverflow.com/questions/1807849

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

HTH Элиас

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

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

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

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

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

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

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

Как выглядит ваше $ fullname при появлении ошибки?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top