Я пытался это сделать 2 суток и выгорел от этой задачи на столько что уже не могу трезво мыслить пытаясь реализовать её. Буду молиться за того человека кто даст готовое решение.
Задача:
Есть стринг
$str = 'kd';
Есть массив кириллитических символов в каждому латинскому типо:
$arr['k'] = ['ы', 'п', 'ш'];
$arr['d'] = ['з', 'н', 'к'];
и т.д. То есть каждую латинскую букву в $str нужно заменить на несколько русских, чтобы на выходе в данной ситуации было что-то вроде:
ыd
пd
шd
kз
kн
kк
(Добавление)
Забыл добавить, чтобы если в входной латинской строке повторяются символы, они разом не заменялись, типо:
$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ш
То есть по идее нужно именно при каждой итерации в цикле делать замену только одного символа.
1. Aleks11 - 20 Мая, 2018 - 01:58:54 - перейти к сообщению
2. Строитель - 20 Мая, 2018 - 10:52:35 - перейти к сообщению
Aleks11, вы можете иначе сформулировать свой вопрос? Я лично ничего не понял... Что на что заменять? Зачем тут цикл? Чем strtr() не угодил?
3. Aleks11 - 20 Мая, 2018 - 15:59:14 - перейти к сообщению
Строитель пишет:
Aleks11, вы можете иначе сформулировать свой вопрос? Я лично ничего не понял... Что на что заменять? Зачем тут цикл? Чем strtr() не угодил?
Напишу сразу своим кодом который не совсем корректно работает:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- $result['a'] = "1-2-3-4";
- $result['z'] = "5-6-7";
- $array_a = explode('-', $result['a']);
- $array_z = explode('-', $result['z']);
- $str = "aza";
- $len_str = strlen($str);
- $domain_array = str_split($str);
- $len_array_a = count($array_a);
- $len_array_z = count($array_z);
- for ($i=0; $i<$len_str; $i++) {
- switch ($domain_array[$i]) {
- case 'a':
- for ($y=0; $y<$len_array_a; $y++) {
- $domain_array[$i] = preg_replace("#a#u", $domain_array[$i], $array_a[$y]);
- $str = implode($domain_array);
- echo '<br>';
- var_dump($str);
- };
- break;
- case 'z':
- for ($y=0; $y<$len_array_z; $y++) {
- $domain_array[$i] = preg_replace("#z#u", $domain_array[$i], $array_z[$y]);
- $str = implode($domain_array);
- echo '<br>';
- var_dump($str);
- };
- break;
- }
- }
На выходе вардампами выдаётся:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- string(3) "1za"
- string(3) "2za"
- string(3) "3za"
- string(3) "4za"
- string(3) "45a"
- string(3) "46a"
- string(3) "47a"
- string(3) "471"
- string(3) "472"
- string(3) "473"
- string(3) "474"
Нужно чтобы выдавалось:
CODE (htmlphp):
скопировать код в буфер обмена
скопировать код в буфер обмена
- string(3) "1za"
- string(3) "2za"
- string(3) "3za"
- string(3) "4za"
- string(3) "a5a"
- string(3) "a6a"
- string(3) "a7a"
- string(3) "az1"
- string(3) "az2"
- string(3) "az3"
- string(3) "az4"