Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Посимвольная многократная замена в строке

Страниц (1): [1]
 

1. Aleks11 - 20 Мая, 2018 - 01:58:54 - перейти к сообщению
Я пытался это сделать 2 суток и выгорел от этой задачи на столько что уже не могу трезво мыслить пытаясь реализовать её. Буду молиться за того человека кто даст готовое решение.
Задача:
Есть стринг
$str = 'kd';

Есть массив кириллитических символов в каждому латинскому типо:
$arr['k'] = ['ы', 'п', 'ш'];
$arr['d'] = ['з', 'н', 'к'];
и т.д. То есть каждую латинскую букву в $str нужно заменить на несколько русских, чтобы на выходе в данной ситуации было что-то вроде:
ыd
пd
шd



(Добавление)
Забыл добавить, чтобы если в входной латинской строке повторяются символы, они разом не заменялись, типо:

$str = 'kdk';

Есть массив кириллитических символов в каждому латинскому типо:
$arr['k'] = ['ы', 'п', 'ш'];
$arr['d'] = ['з', 'н', 'к'];

Вывод не должен быть таким:
ыdы
пdп
шdш
kзk
kнk
kкk

А должен быть таким:
ыdk
пdk
шdk
kзk
kнk
kкk
kdы
kdп
kdш

То есть по идее нужно именно при каждой итерации в цикле делать замену только одного символа.
2. Строитель - 20 Мая, 2018 - 10:52:35 - перейти к сообщению
Aleks11, вы можете иначе сформулировать свой вопрос? Я лично ничего не понял... Что на что заменять? Зачем тут цикл? Чем strtr() не угодил?
3. Aleks11 - 20 Мая, 2018 - 15:59:14 - перейти к сообщению
Строитель пишет:
Aleks11, вы можете иначе сформулировать свой вопрос? Я лично ничего не понял... Что на что заменять? Зачем тут цикл? Чем strtr() не угодил?


Напишу сразу своим кодом который не совсем корректно работает:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $result['a'] = "1-2-3-4";
  3. $result['z'] = "5-6-7";
  4. $array_a = explode('-', $result['a']);
  5. $array_z = explode('-', $result['z']);
  6.  
  7. $str = "aza";
  8. $len_str = strlen($str);
  9. $domain_array = str_split($str);
  10.  
  11. $len_array_a = count($array_a);
  12. $len_array_z = count($array_z);
  13.  
  14.  
  15. for ($i=0; $i<$len_str; $i++) {
  16.         switch ($domain_array[$i]) {
  17.                 case 'a':
  18.                         for ($y=0; $y<$len_array_a; $y++) {
  19.                                 $domain_array[$i] = preg_replace("#a#u", $domain_array[$i], $array_a[$y]);
  20.                                 $str = implode($domain_array);
  21.                                 echo '<br>';
  22.                                 var_dump($str);
  23.                         };
  24.                         break;
  25.                 case 'z':
  26.                         for ($y=0; $y<$len_array_z; $y++) {
  27.                                 $domain_array[$i] = preg_replace("#z#u", $domain_array[$i], $array_z[$y]);
  28.                                 $str = implode($domain_array);
  29.                                 echo '<br>';
  30.                                 var_dump($str);
  31.                         };
  32.                         break;
  33.         }
  34. }
  35.  


На выходе вардампами выдаётся:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. string(3) "1za"
  3. string(3) "2za"
  4. string(3) "3za"
  5. string(3) "4za"
  6. string(3) "45a"
  7. string(3) "46a"
  8. string(3) "47a"
  9. string(3) "471"
  10. string(3) "472"
  11. string(3) "473"
  12. string(3) "474"
  13.  


Нужно чтобы выдавалось:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. string(3) "1za"
  3. string(3) "2za"
  4. string(3) "3za"
  5. string(3) "4za"
  6. string(3) "a5a"
  7. string(3) "a6a"
  8. string(3) "a7a"
  9. string(3) "az1"
  10. string(3) "az2"
  11. string(3) "az3"
  12. string(3) "az4"
  13.  

(Добавление)
Если попытаться переформулировать задачу, то звучит она так:
Есть слово "abrakadabra" мы посимвольно анализируем его, то есть в первой итерации цикла - первую букву. Есть некий алфавит смены одной буквы к примеру "a" на перечень цифр "1-2-3-4" и после каждой смены мы должны выводить каждый раз слово. Я не знаю как ещё описать Недовольство, огорчение
4. Строитель - 20 Мая, 2018 - 20:55:02 - перейти к сообщению
Для не повторяющихся символов в строке можно как-то так
Спойлер (Отобразить)
А для повторов может быть сами разберётесь )
5. Aleks11 - 20 Мая, 2018 - 21:55:19 - перейти к сообщению
Так в этом то и проблема, для не повторяющихся символов там всё гораздо тривиальнее. И я в процессе эти 2 дня именно это побороть не смог :\
Из-за этого в своём же примере привёл строку именно с двумя 'a' 'aza'
6. Dee - 06 Июня, 2018 - 02:44:16 - перейти к сообщению
Цитата:
Буду молиться за того человека кто даст готовое решение.

Можешь уже начинать Хорошо
Спойлер (Отобразить)


На выходе:
Спойлер (Отобразить)


Держиииииииииииии Ниндзя

 

Powered by ExBB FM 1.0 RC1