Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Посимвольная многократная замена в строке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Крик души!
Aleks11
Отправлено: 20 Мая, 2018 - 01:58:54
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2018  


Помог: 0 раз(а)




Я пытался это сделать 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ш

То есть по идее нужно именно при каждой итерации в цикле делать замену только одного символа.
 
 Top
Строитель
Отправлено: 20 Мая, 2018 - 10:52:35
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Aleks11, вы можете иначе сформулировать свой вопрос? Я лично ничего не понял... Что на что заменять? Зачем тут цикл? Чем strtr() не угодил?

(Отредактировано автором: 20 Мая, 2018 - 10:54:07)

 
 Top
Aleks11
Отправлено: 20 Мая, 2018 - 15:59:14
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2018  


Помог: 0 раз(а)




Строитель пишет:
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" и после каждой смены мы должны выводить каждый раз слово. Я не знаю как ещё описать Недовольство, огорчение
 
 Top
Строитель
Отправлено: 20 Мая, 2018 - 20:55:02
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Для не повторяющихся символов в строке можно как-то так
Спойлер (Отобразить)
А для повторов может быть сами разберётесь )
 
 Top
Aleks11
Отправлено: 20 Мая, 2018 - 21:55:19
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2018  


Помог: 0 раз(а)




Так в этом то и проблема, для не повторяющихся символов там всё гораздо тривиальнее. И я в процессе эти 2 дня именно это побороть не смог :\
Из-за этого в своём же примере привёл строку именно с двумя 'a' 'aza'

(Отредактировано автором: 20 Мая, 2018 - 21:57:48)

 
 Top
Dee
Отправлено: 06 Июня, 2018 - 02:44:16
Post Id



Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




Цитата:
Буду молиться за того человека кто даст готовое решение.

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


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


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

(Отредактировано автором: 06 Июня, 2018 - 03:02:04)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB