Преобразовать разделенный запятыми список полных имен в массив - PullRequest
1 голос
/ 04 мая 2011

У меня есть строка, такая как: Кросби Бинг, Гретцки Уэйн, Клементе Роберто

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

LName[0]=>Crosby 
FName[0]=>Bing, 
LName[1]=>Gretzky 
FName[1]=>Wayne, 
LName[2]=>Clemente 
FName[2]=>Roberto

IЯ ужасен с массивами и манипуляциями со строками и сделал много поисков в сети, но не могу найти подходящее решение.

Я с нетерпением жду вашего ответа!

Ответы [ 7 ]

2 голосов
/ 04 мая 2011
$nameString = 'Crosby Bing, Gretzky Wayne, Clemente Roberto';
$names = array_map('trim', explode(',', $nameString));

foreach ($names as &$name) {
  $name = explode(' ', $name, 2);
}

Это немного отличается от того, что вы хотите. Это массив массивов, где внутренние массивы имеют 2 значения, первое из которых первое, а второе - второе (и любое другое) имя. Это не должно быть трудно преобразовать его в вашу структуру, если даже требуется.

echo $name[0][0]; // Crosby
echo $name[0][1]; // Bing

Кевин Пено предлагает что-то подобное в комментариях ниже

$nameString = 'Crosby Bing, Gretzky Wayne, Clemente Roberto';

foreach (explode(',',$nameString) as &$name) {
  $name = explode(' ', trim($name), 2);
}

Тем не менее, они оба являются семантическими эквивалентами, и, пока в строке нет имен 1M (которые также потребляют 1 байт памяти средней длины строки), я не думаю, что кто-либо может понять разницу в производительности. .

1 голос
/ 04 мая 2011

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

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

$allNames = 'Crosby Bing, Gretzky Wayne, Clemente Roberto'; // your string
$names = explode(', ', $allNames); // create an array with all names
$LName = $FName = array(); // initialize your result arrays
foreach($names as $name) {
    list($firstName, lastName) = explode(' ', $name, 2); // split each name apart
    $FName[] = $firstName; // add first name to result array
    $LName[] = $lastName; // add last name to result array
}

Explode ваш друг здесь;)

1 голос
/ 04 мая 2011

Я думаю explode() может быть полезным.

Пример:

Вещи, используемые: explode() var_dump()

$name = 'Crosby Bing';
$splittedName = explode(' ', $name);

var_dump($splittedName);

Должен вернуться:

[0] => 'Crosby',
[1] => 'Bing'

А разбиение списка имен - это просто цикл:

Вещи, используемые: explode() Еогеасп ссылка

$names = 'Crosby Bing, Gretzky Wayne, Clemente Roberto';
$namesArray = explode(',', $names);

foreach($names as &$name)
{
    $name = explode(' ', trim($name));
}

И простая функция:

Вещи, используемые: explode() Создание функции count() array_slice()

function GetNames($name)
{
    $names = explode(' ', $name);
    $namesCount = count($names);

    $data = array();
    $data['Names']  = array_slice($names, 0, $namesCount - 2);
    $data['Surname'] = $names[$namesCount - 1];

    return $data;
}
1 голос
/ 04 мая 2011

Попробуйте:

<?php

$LName = array();
$FName = array();

list($LName[0],$FName[0],$LName[1],$FName[1],$LName[2],$FName[2]) = 
      explode(" ","Crosby Bing, Gretzky Wayne, Clemente Roberto");

print_r($LName);

print_r($FName);

?>

демо: http://codepad.org/g4YnwKxW

Или, если ваш список динамический:

<?php

    $LName = array();
    $FName = array();

    $fullNames = 
          explode(", ","Crosby Bing, Gretzky Wayne, Clemente Roberto");

    foreach($fullNames as $full){
         list($LName[], $FName[]) = explode(" ", $full);
    }

    print_r($LName);

    print_r($FName);

    ?>

демо: http://codepad.org/WMIx9mJD

1 голос
/ 04 мая 2011

Готово в одну строку!

preg_match_all('/(\w+) (\w+)(?:, )?/', "Crosby Bing, Gretzky Wayne, Clemente Roberto", $a);

/*
    $fName = $a[1];
    $lName = $a[2];
*/
0 голосов
/ 04 мая 2011

Демо

http://codepad.org/P4vSIgKP

Код

$str = 'Crosby Bing, Gretzky Wayne, Clemente Roberto';
$arr1=explode(',', $str);

foreach ($arr1 as $item){
   $arr2 = explode(' ', trim($item));
   $lname[]=$arr2[0];
   $fname[]=$arr2[1];       
}

print_r($lname);
print_r($fname);

Результат

Array
(
    [0] => Crosby
    [1] => Gretzky
    [2] => Clemente
)
Array
(
    [0] => Bing
    [1] => Wayne
    [2] => Roberto
0 голосов
/ 04 мая 2011

Вы можете использовать функцию explode , например:

$names_string  = "Crosby Bing, Gretzky Wayne, Clemente Roberto";
$names = explode(",", $names_string);
echo $names[0]; // displays Crosby Bing
echo $names[1]; // displays Gretzky Wayne
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...