Примерно так должно работать:
$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: É