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 :: str_replace поиск в массиве и замена из массива не получается

 PHP.SU

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


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

> Без описания
sv2011
Отправлено: 04 Августа, 2011 - 12:01:03
Post Id


Новичок


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


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




Здравствуйте.
Нужен маленький скриптик транслитерации.
Написал вот это:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $string = $_GET['name'];
  2. $trans1=array("CSH","Csh","ZH","Zh","CH","Ch","SH","Sh","JO","Jo","JE","Je","JU","Ju","JA","Ja","csh","zh","ch","sh","jo","je","ju","ja","A","B","V","G","D","E","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","H","C","x","'","Y","a","b","v","g","d","e","z","i","j","k","l","m","n","o","p","r","s","t","u","f","h","c","x","x","y","_","_");
  3. $trans2=array("Щ","Щ","Ж","Ж","Ч","Ч","Ш","Ш","Ё","Ё","Э","Э","Ю","Ю","Я","Я","щ","ж","ч","ш","ё","э","ю","я","А","Б","В","Г","Д","Е","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","ь","ь","Ы","а","б","в","г","д","е","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ь","ь","ы"," ",".");
  4. $hz=str_replace($trans2,$trans1,$string);
  5. echo $hz;

Если поиск идет конкретного значения переменной
CODE (htmlphp):
скопировать код в буфер обмена
  1. $string = $_GET['name'];
  2. $some="Б";
  3. $somerep="B";
  4. echo str_replace($some,$somerep,$string);

то проблем никаких, среди строки находит символ и заменяет. А вот с массивом беда - не работает, возвращает неизменную строку
Помогите где я ошибся подскажите.
 
 Top
EuGen Администратор
Отправлено: 04 Августа, 2011 - 12:07:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Цитата:
С версии PHP 4.0.5, любой аргумент str_replace() может быть массивом

Настолько старая версия PHP ?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
sv2011
Отправлено: 04 Августа, 2011 - 12:23:04
Post Id


Новичок


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


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




EuGen пишет:
Цитата:
С версии PHP 4.0.5, любой аргумент str_replace() может быть массивом

Настолько старая версия PHP ?

Про версию php я в комментариях к функции читал, у меня 5.х
И еще в описании функции написано, что любым аргументом может быть массив, однако не получается.. Понимаю, что гдето втупил, но где не вижу..
P.S. Хм.. В настройках сервера стоит 4.3, хотя я совершенно точно версию изменял...
Изменю, отпишусь.
Странно, в настройках сервера (использую CPanel) версия не изменяется, точнее сбрасывается обратно на 4.3.9
Какие варианты с этой версийей есть для реализации нужного?

(Отредактировано автором: 04 Августа, 2011 - 12:30:27)

 
 Top
OrmaJever Модератор
Отправлено: 04 Августа, 2011 - 12:48:55
Post Id



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


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


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




sv2011 версию можно определить phpinfo()


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Arni
Отправлено: 04 Августа, 2011 - 12:51:16
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Июль 2011  


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




Может как-то так будет проще?

PHP:
скопировать код в буфер обмена
  1.  
  2. function transtable($name){
  3. $transtable=array('А' => 'A','Б' => 'B','В' => 'V','Г' => 'G','Д' => 'D',
  4. 'Е' => 'E','Ё' => 'Yo','Ж' => 'Zh','З' => 'Z','И' => 'I','Й' => 'Y','К' => 'K','Л' => 'L',
  5. 'М' => 'M','Н' => 'N','О' => 'O','П' => 'P','Р' => 'R','С' => 'S','Т' => 'T','У' => 'U','Ф' => 'F',
  6. 'Х' => 'H','Ц' => 'Ts','Ч' => 'Ch','Ш' => 'Sh','Щ' => 'Shch','Ъ' => '','Ы' => 'I','Ь' => '',
  7. 'Э' => 'E','Ю' => 'Yu','Я' => 'Ya','а' => 'a','б' => 'b','в' => 'v','г' => 'g','д' => 'd',
  8. 'е' => 'e','ё' => 'yo','ж' => 'zh','з' => 'z','и' => 'i','й' => 'y','к' => 'k','л' => 'l',
  9. 'м' => 'm','н' => 'n','о' => 'o','п' => 'p','р' => 'r','с' => 's','т' => 't','у' => 'u','ф' => 'f',
  10. 'х' => 'h','ц' => 'ts','ч' => 'ch','ш' => 'sh','щ' => 'shch','ъ' => '','ы' => 'i','ь' => '',
  11. 'э' => 'e','ю' => 'yu','я' => 'ya',' ' => '-');
  12. return preg_replace('/[^0-9a-zA-Z_-]/', '', strtolower(strtr($name, $transtable)));
  13. }
  14.  
 
 Top
sv2011
Отправлено: 05 Августа, 2011 - 08:25:16
Post Id


Новичок


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


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




И так, версия php у меня 5.2.17 и, соответственно, str_replace должен искать в массиве и заменять массивом.
Но, тут уж ,видимо, моя ошибка. Функция, как я понимаю, ищет полностью весь массив в потоке и, не находя совпадения, ничего не заменяет. Вопрос теперь стоит так - как сделать, чтоб поиск был по значениям ключей, по каждому по отдельности?
Выводы о поиске в массиве сделал из-за того, что для проверки сделал поиск в потоке определенного значения и заменой из массива, ну и соответственно в итоге на экране увидел, что заменяемый символ заменяется array, а не значением.
Вот сам скрипт:
PHP:
скопировать код в буфер обмена
  1.     $trlat = array("CSH","Csh","ZH","Zh","CH","Ch","SH","Sh","JO","Jo","JE","Je","JU","Ju","JA","Ja","csh","zh","ch","sh","jo","je","ju","ja","A","B","V","G","D","E","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","H","C","x","'","Y","a","b","v","g","d","e","z","i","j","k","l","m","n","o","p","r","s","t","u","f","h","c","x","x","y","_","_");
  2.     $trrus = array("Щ","Щ","Ж","Ж","Ч","Ч","Ш","Ш","Ё","Ё","Э","Э","Ю","Ю","Я","Я","щ","ж","ч","ш","ё","э","ю","я","А","Б","В","Г","Д","Е","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","ь","ь","Ы","а","б","в","г","д","е","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ь","ь","ы"," ",".");
  3.      
  4.     $string = $_GET['name'];
  5.     $newres = str_replace ("$trrus", "$trlat", $string);
  6.     echo $newres;

arni, Ваш код мне не помог, к сожалению, может я его не правильно применил...

(Отредактировано автором: 05 Августа, 2011 - 08:32:13)

 
 Top
White
Отправлено: 05 Августа, 2011 - 08:45:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


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




зачем усложнять такую простую штуку как транслитерация http://php.net/manual/ru/function.strtr.php
CODE (htmlphp):
скопировать код в буфер обмена
  1. $trans = array("а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e", "ё"=>"yo","ж"=>"j","з"=>"z","и"=>"i","й"=>"i","к"=>"k","л"=>"l", "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t", "у"=>"y","ф"=>"f","х"=>"h","ц"=>"c","ч"=>"ch", "ш"=>"sh","щ"=>"sh","ы"=>"i","э"=>"e","ю"=>"u","я"=>"ya", "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E", "Ё"=>"Yo","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"I","К"=>"K", "Л"=>"L","М"=>"M","Н"=>"N","О"=>"O","П"=>"P", "Р"=>"R","С"=>"S","Т"=>"T","У"=>"Y","Ф"=>"F", "Х"=>"H","Ц"=>"C","Ч"=>"Ch","Ш"=>"Sh","Щ"=>"Sh", "Ы"=>"I","Э"=>"E","Ю"=>"U","Я"=>"Ya", "ь"=>"","Ь"=>"","ъ"=>"","Ъ"=>"");
  2. $string = $_GET['name'];
  3. $newres = strtr($string, $trans);
  4. echo $newres;


-----
if(time()>1356048000) die();
 
 Top
sv2011
Отправлено: 05 Августа, 2011 - 09:24:04
Post Id


Новичок


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


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




White пишет:
зачем усложнять такую простую штуку как транслитерация http://php.net/manual/ru/function.strtr.php

Ну да, и все ок работает. Спасибо за помощь)
 
 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