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]   

> Описание: помогите новичку
MBmusic
Отправлено: 18 Января, 2012 - 20:54:22
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


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




в общем мне надо написать функцию my_string_replace($str), которая средствами пхп переставляет четный с нечетными символы в строке.

ну типо есть строка символов: qwer
надо что бы выводило wqre
както так, не знаю как сделать...
 
 Top
snikers987
Отправлено: 18 Января, 2012 - 21:22:00
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


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




PHP:
скопировать код в буфер обмена
  1. function shuffle_string($sString){
  2.         $rgArr = preg_split('//u', $sString, -1, PREG_SPLIT_NO_EMPTY);
  3.         for($i=0; $i<count($rgArr); $i++){
  4.                 if(($i+1)%2==0){
  5.                         $rgResult[$i-1] = $rgArr[$i];
  6.                 }else{
  7.                         $rgResult[$i+1] = $rgArr[$i];
  8.                 }
  9.         }
  10.         ksort($rgResult);
  11.         return implode('', $rgResult);
  12. }

Как-то так..
С utf-8 дружит.

(Отредактировано автором: 18 Января, 2012 - 21:57:53)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Okula
Отправлено: 18 Января, 2012 - 21:26:36
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




Можно куда проще:
PHP:
скопировать код в буфер обмена
  1. function myStringReplace($str) {
  2.     $str_arr = str_split($str, 2);
  3.     $new_str_arr = array();
  4.     foreach($str_arr as $v) {
  5.         $new_str_arr[] = strrev($v);
  6.     }
  7.    
  8.     return implode('', $new_str_arr);
  9. }

Правда функция не будет корректно работать с кирилицей в многобайтовых кодировках. Поэтому если работа предстоит с такой кодировкой то лучше строку для начала преобразовать в кодировку ANSI с помощью функции iconv()
 
 Top
MBmusic
Отправлено: 18 Января, 2012 - 21:36:36
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


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




спс, чуваки) выручили!
 
 Top
OrmaJever Модератор
Отправлено: 18 Января, 2012 - 21:44:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




альтернативный вариант
PHP:
скопировать код в буфер обмена
  1. function my_string_replace($string) {
  2.         $len = mb_strlen($string);
  3.         if(($len % 2) != 0) return false; // если не парное количество символов
  4.         for($i=0; $i<$len; $i=$i+2) {
  5.                 $tmp = $string{$i};
  6.                 $string{$i} = $string{$i+1};
  7.                 $string{$i+1} = $tmp;
  8.         }
  9.         return $string;
  10. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Okula
Отправлено: 18 Января, 2012 - 21:51:50
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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





У меня меньше всего строк в функции Радость
 
 Top
OrmaJever Модератор
Отправлено: 18 Января, 2012 - 23:19:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




PHP:
скопировать код в буфер обмена
  1. function my_string_replace($string) {$len = mb_strlen($string);if(($len % 2) != 0) return false; for($i=0; $i<$len; $i=$i+2) {$tmp = $string{$i};$string{$i} = $string{$i+1};$string{$i+1} = $tmp;}return $string;}
  2.  

Подмигивание


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Января, 2012 - 23:42:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Кароче я вас всех сделал Радость
PHP:
скопировать код в буфер обмена
  1. function my_string_replace($str) {
  2.   return preg_replace("/(\w)(\w)/","\\2\\1",$str);
  3.   }
 
 Top
LIME
Отправлено: 18 Января, 2012 - 23:59:32
Post Id


Активный участник


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


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




DeepVarvar ненавижу))
выбросить теперь мою ф-цию для usort
 
 Top
Okula
Отправлено: 19 Января, 2012 - 00:10:34
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




OrmaJever, от того что ты в одну строку написал код его меньше не стало Радость
DeepVarvar, а я чтот и не подумал о регулярках. Улыбка
 
 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