Как извлечь инициалы из имени, используя Laravel - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть метод ниже, который возвращает мне список зарегистрированных пользователей:

$users = \App\Models\User::all();

Получается, что я хотел бы представить только инициалы имен в этом списке.

Пример:

Карлос Перейра до Насименту = CN

Маркос Аурелио = MA

Сандра Лопес = SL

Как я могу это сделать, получив эти данные из списка?

Можно ли обработать этот список, взяв только инициалы переменной $ name?

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Примерно так должно работать:

$names = \App\Models\User::pluck('name');
$initials = [];
foreach($names as $name) {
    $nameParts = explode(' ', trim($name));
    $firstName = array_shift($nameParts);
    $lastName = array_pop($nameParts);
    $initials[$name] = (
        mb_substr($firstName,0,1) .
        mb_substr($lastName,0,1)
    );
}

var_dump($initials);
Вывод:
array(1) {
  ["Carlos Pereira do Nascimento"]=>
  string(2) "CN"
  ["Marcos Aurelio"]=>
  string(2) "MA"
  ["Émile Durkheim"]=>
  string(2) "ÉD"
}

Обратите внимание на использование mb_substr вместо обычного substr или строкового индекса. Это вернет правильные значения для имен, начинающихся с символов, отличных от ASCII, например, «Émile»

echo substr('Émile Durkheim', 0, 1);
// output: b"Ã"
echo 'Émile Durkheim'[0];
// output: b"Ã"
echo mb_substr('Émile Durkheim', 0, 1);
// output: É
1 голос
/ 13 апреля 2020

Вы можете использовать Laravel Accessor, чтобы получить инициалы, изменяя следующий код:

public function getInitialsAttribute(){
    $name = 'Carlos Pereira do Nascimento';
    $name_array = explode(' ',trim($name));

    $firstWord = $name_array[0];
    $lastWord = $name_array[count($name_array)-1];

    return $firstWord[0]."".$lastWord[0];
}

Теперь вы можете получить инициалы, используя {{$ user-> initials}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...