2013-05-30 2 views
1

У меня есть массив, который содержит полное имя. Я знаю, как отображать фамилию, которая в основном находится в первом индексе. Как отобразить остальные значения после имени?Как получить значение массива после первого индекса?

$fullname = array('fullname' => 'POTTER Harry James'); 
$res = implode("", $fullname); 
$name = preg_split("/[\s,]+/", $res); 
$lname = $name[0]; 

Что я сделал в имени:

$fname = $name[1]. " ".$name[2]; 

Он отлично работает, но есть более чистый способ сделать это? Я имею в виду, что, если у пользователя более двух первых имен?

Спасибо.

+0

Пожалуйста, обратите внимание на нижнюю часть моего ответа. – BlitZ

ответ

1
$fullname = array('fullname' => 'POTTER Harry James'); 
$firstNames = strstr($fullname['fullname'], ' '); // $firstNames='Harry James' 

Это получает строку после первый космический характер.

+0

спасибо за то, что заглянули в мой вопрос. – ladybug

3

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

<?php 
$fullname = array('fullname' => 'POTTER Harry James'); 
$parts = explode(' ', $fullname['fullname']); 

var_dump($parts); 
?> 

Выставки:

array(3) { 
    [0]=> 
    string(6) "POTTER" 
    [1]=> 
    string(5) "Harry" 
    [2]=> 
    string(5) "James" 
} 

Вы можете использовать любую часть $parts таким образом, что вам нужно.

<?php 
$a = array_shift($parts); 
$b = implode(' ', $parts); 

echo "{$b} ({$a})"; // Harry James (POTTER) 
?> 

UPDv1:

В текущем коде, вы можете сделать только то же самое:

<?php 
$lname = array_shift($name); 
$fname = implode(' ', $name); 
?> 
+0

+1 от меня. Потому что это самый простой способ разделить, кроме использования в Вопросе. – NullPointer

+0

@CORRUPT: Взорвать не получится. Я пробовал это бесчисленное количество раз. проблема в том, что второй параметр должен быть строкой. – ladybug

+0

@ladybug, работает для меня. Просто проверьте это. Второй аргумент - это уже строка. И это должно быть быстрее, ваш подход (меньше вызовов функций). – BlitZ

0

Вы могли бы сделать

<?php 
$fullname = array('fullname' => 'POTTER Harry James'); 
list($lname,$fname) = explode(" ", $fullname["fullname"],2); 
echo $fname."<br>".$lname; 
?> 

Это будет работать, если имя содержит 2 слова или более. Если есть более двух слов, то все, кроме первого слова, будет считаться первым именем, а первое слово будет считаться фамилией.

0

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

Если вы хотите разделить имя и фамилию своих пользователей, вы должны запросить их отдельно, так как не существует регулярного выражения, которое может определить правильный способ разбить их имя.

2

Я думаю, что сначала вы должны вывести фамилию из массива, а затем использовать цикл, чтобы объединить остальные имена в качестве имени.

$fullname = array('fullname' => 'POTTER Harry James'); 
$res = implode("", $fullname); 

$name = preg_split("/[\s,]+/", $res); 

$lname = array_shift($name); 

$fname = ""; 

foreach($name as $fnames) 
    $fname.= " ".$fnames; 
+0

Я думаю, что другие ответы проще. – Ziarno

+0

@ Ziarno все еще, этот ответ тоже правильный. Работать, по крайней мере. – BlitZ

+0

Ну, на самом деле вопрос был * есть ли более чистый способ сделать это? * Imo с помощью regex здесь не нужно. – Ziarno

Смежные вопросы