Как решить задачу? PHP
Как заменить букву в строке на её порядковый номер в алфавите (английский). Результат должен иметь примерно такой вид: 20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11 и иметь тип string.
function alphabet_position(string $s): string {
$alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
$lower = mb_strtolower($s);
for ($i=0; $i < strlen($lower); $i++){
foreach($alphabet as $key){
if($lower[$i] == $key){
(string) $value = array_search($lower[$i], $alphabet)+1;
echo "$value ";
}
}
}
}
Ответы (1 шт):
function alphabet_position(string $s): string {
$alphabet = [
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
];
$chars = str_split(mb_strtolower($s));
$encodedMessage = '';
foreach($chars as $char) {
$encodedMessage .= ord(strtoupper($char)) - ord('A') + 1 . ' ';
}
return $encodedMessage;
}
echo alphabet_position('asd');
Эта строка $chars = str_split(mb_strtolower($s)); превращает строку в массив символом в нижнем регистре.
Здесь используется функция ord:
Интерпретирует бинарное значение первого байта строки character как беззнаковое целое.
Если строка создана в однобайтовой кодировке, такой как ASCII, ISO-8859 или Windows 1252, результат функции будет эквивалентен позиции символа в соответствующей таблице кодировки. В любом случае, эта функция ничего не знает про кодировки и не сможет вернуть кодовую точку первого символа строки, закодированной в многобайтовой кодировке, такой как UTF-8 или UTF-16.