Я исследовал довольно долго, прежде чем писать, но я не мог придумать ответ.
Я пытаюсь удалить все символы, кроме первого, из строки. Строка будет именем. Имя может иметь имя и фамилию, а также отчество. Поэтому моя задача — разбить строку на слова и найти последний, удалить символы и добавить точку к первой букве. Более того, если оно присутствует в строке, второе имя не должно быть в результате.
Например: Chuck Ray Norris
должен превратиться в Chuck N.
Я попробовал пару regex
а также strpos
но эта задача слишком сложна для меня и моих навыков.
решение без регулярных выражений для шаблона «FirstName SecondName ThirdName … LastName»:
<?php
$str = "Chuck Ray Norris";
$spls = explode(" ", $str);
echo $spls[0] . " " . $spls[count($spls)-1][0] . ".";
Выход:
Chuck N.
Ты можешь использовать:
$s = 'Chuck Ray Norris';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.
$s = 'Chuck Norris';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.
$s = 'Chuck N.';
$r = preg_replace('/^(\S+)\s+(?:\S+\s+)*(\S)\S*$/', '$1 $2.', $s);
//=> Chuck N.
(?:\S+\s+)*
используется для того, чтобы сделать одно или несколько отчеств необязательными. Это также заботится о случае, когда имя уже в желаемом формате (случай 3 выше).
я не знаю, сработает ли это, но попробуйте
<?php
$fullName = 'Chuck Ray Norris';
//$fullName = 'Chuck Ray';
//$fullName = 'Chuck';
$names = explode(' ', $fullName);
if((count($names) == 3) && isset($names[2])){
echo $names[0] . ' ' . $names[2][0] . '.';
}else{
if((count($names) == 2) && isset($names[1])){
echo $names[0] . ' ' . $names[1][0] . '.';
}else{
echo $names[0];
}
}
?>
попытайтесь изменить $ fullName на ‘Chuck Ray’ или ‘Chuck’, он все еще работает.
Вот как я бы это сделал:
$pos = strrpos($string, " ");
$pos = $pos === false ? 0 : $pos + 1;
$char = substr($string,$pos,1);
В качестве альтернативы, если это просто строка с требованиями:
Чак Рэй Норрис -> Чак Н
Затем с помощью взорваться (), зиЬзЬг () а также StrLen ():
<?php
$string = "Chuck Ray Norris";
// break string into words
$array = explode(" ", $string);
// keep the first word, keep the last word's first character
// ensure we have broken into vaid parts
$length = count($array);
if($length > 2) {
// ie. Chuck Norris
$first_word = $array[0];
$last_word = $array[$length-1];
// get first character,
$first_character = substr($last_word, 0, 1);
}
// else case is omitted
print "$first_word $first_character\n"; // outputs Chuck N
?>
строка substr (строка $ string, int $ start [, int $ length])
Пример: substr($last_word, 0, 1)
int $start
: длина «Норриса» равна 6, поэтому первая позиция равна 0 int $length
: нам нужен только 1 символ, поэтому позиция 0, «N»; Надеюсь это поможет.