Как решить задачу? 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 шт):

Автор решения: mepihindeveloper
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.

→ Ссылка