Как можно заменить каждую букву строки на (рандомную) цифру в php
Допустим у нас есть $x = 'Hello world'. У меня появился вопрос, как можно заменить каждую букву в $x на рандомную цифру от 1 до 100? У меня есть некоторые предположения, которые, почему то, не работают например я пробовал:
$x = 'Hello world'; // задаем строку
for($i = 0;$i<strlen($x);$i++){ //цикл, который, по идее, бегает от начала строки до конца строки
echo str_replace($x[$i], rand(1,100),$x); //вывод замены буквы по индексу на рандомуню цифру с помощью str_replace()
}
так же, пробовал с помощью str_split():
<?php
$x = 'Hello world';
$arr = str_split($x);
for($i=0;$i<=count($arr);$i++){
echo str_replace($arr[$i], rand(1,100),$arr);
}
но при этом, почему то, появляется много массивов, при выводе которых видно, что буквы в предложении заменены архаично. Так же, в идеале, хотел бы понять, как можно заменить каждую букву в предложении на ее порядковый номер в алфавите(a = 1, b = 2,c = 3 и т.д) Спасибо
Ответы (2 шт):
Решения "в лоб" (предполагается использование только латиницы):
- Замена каждой буквы на случайное число в диапазоне от 1 до 100:
<?php
$sTxt = 'Hello world';
$sRes = preg_replace_callback(
'/\w/',
function ($matches) {
return rand(1, 100) . ' '; // Пробел только для примера
},
$sTxt
);
echo $sRes;
- Замена каждой буквы на её порядковый номер в алфавите:
<?php
$sTxt = 'Hello world';
$sRes = preg_replace_callback(
'/\w/',
function ($matches) {
return ord(strtoupper($matches[0])) - 64 . ' '; // Пробел только для примера
},
$sTxt
);
echo $sRes;
Зацеплюсь за эту часть задачи: "в идеале, хотел бы понять, как можно заменить каждую букву в предложении на ее порядковый номер в алфавите(a = 1, b = 2,c = 3 и т.д) ".
$in_glass = "Hello world";
$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'];
for ($i = 0; $i < mb_strlen($in_glass); $i++) {
$char = mb_strtolower(mb_substr($in_glass, $i, 1));
$k = 1;
foreach ($array as $val) {
if ($char == $val) {
$char = $k;
break;
}
$k++;
}
$result .= $char;
}
print $result;
Ответ: 85121215 231518124
Этот же пример с array_flip()
$in_glass = "Hello world";
$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'];
$array_new = array_flip($array);
for ($i = 0; $i < mb_strlen($in_glass); $i++) {
$char = mb_strtolower(mb_substr($in_glass, $i, 1));
foreach ($array_new as $val => $value) {
if ($char == $val) {
$char = $value+1;
break;
}
}
$result .= $char;
}
print $result;
Ответ:85121215 231518124
На сколько я знаю, нельзя просто пробежать по слову циклом, нужно брать функции, которые вытаскивают букву посимвольно, например mb_substr Если расматривать изначальную задачу: "как можно заменить каждую букву в $x на рандомную цифру от 1 до 100?", то вот так:
$in_glass = "Hello world";
$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'];
for ($i = 0; $i < mb_strlen($in_glass); $i++) {
$char = mb_strtolower(mb_substr($in_glass, $i, 1));
foreach ($array as $val) {
if ($char == $val) {
$char = rand(0,100);
break;
}
}
$result .= $char;
}
print $result;
Ответ: 7681812846639 69262692966374
При данном методе не надо учитывать пробелы, знаки препинания и спец символы.