Расширенное использование взорвать ()

Я хочу, чтобы пользователь вводил свое полное имя в одно поле, пытаясь создать стильный UX.

$user = 'Robert John Alex Ridly';
$user = explode(' ', $user);

Я хочу взорвать строку и выделить разделы для переменных

$first_name = $user[0];
$middle_names = ?
$last_names = $user[last]?;

Проблема A. Как вы нацелитесь на последний взрыв, не зная, сколько будет взорванных «кусков»?

Проблема B. Есть ли способ нацелить все части между первой и последней и собрать их вместе в строку, добавив пробелы?


person Bjaeg    schedule 20.12.2015    source источник
comment
Вы можете использовать array_pop($user) для фамилии и array_shift($user) для имени, а затем, если $user не пусто, implode(' ', $user) для любого второго имени (отчеств)?   -  person segFault    schedule 20.12.2015
comment
Вы можете узнать, сколько штук будет: count($user); = количество штук.   -  person Santy    schedule 20.12.2015


Ответы (3)


А. вы можете использовать end()

end() продвигает внутренний указатель массива к последнему элементу и возвращает его значение.

B. вы могли бы сделать что-то вроде

foreach ($exploded as $key=>$value) {
   if ($key == 0 || $key == (count($exploded) -1)) continue;
   $middle_name_array[] = $value;
}

$middle_name = implode(' ', $middle_name_array);

могут быть лучшие решения для проблемы B.

person Athikrishnan    schedule 20.12.2015

Рабочий пример, как объяснено в комментарии:

$user = 'Robert John Alex Ridly';
$user = explode(' ', $user);

// Gets first element in $user
$first_name = array_shift($user);

// Gets last element in $user (A)
$last_name = array_pop($user);

// Assign remaining names (B)
$middle_names = implode(" ", $user); // Or just assign $users array (It will only contain those middle names at this point)
person segFault    schedule 20.12.2015

Проблема А:

Вы можете настроить таргетинг на последний элемент массива, используя $last_name = end($user). Функция end() сообщает php, что нужно получить последний элемент массива.

Проблема Б:

Вы можете использовать функцию array_slice() в php.

array_slice (массив, начало, длина, сохранение)

длина: опционально. Числовое значение. Указывает длину возвращаемого массива. Если для этого значения установлено отрицательное число, функция прекратит нарезку так далеко от последнего элемента. Если это значение не задано, функция вернет все элементы, начиная с позиции, заданной параметром start.

сохранить: необязательно. Указывает, должна ли функция сохранять или сбрасывать ключи.

так что в вашем примере это будет

$middle_names = implode(" ", array_slice($user,1,-1))

W3Schools array_slice()

person DustinPianalto    schedule 20.12.2015
comment
Почти уверен, что $user[-1] выдаст ошибку Undefined Index. - person segFault; 20.12.2015
comment
Да, отредактировал это. Последние несколько дней программировал на python. - person DustinPianalto; 20.12.2015
comment
хорошо, да php может быть странным - person segFault; 20.12.2015