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]   

> Без описания
dieGo_nk
Отправлено: 22 Февраля, 2012 - 15:09:07
Post Id



Новичок


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


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




Все привет!
Нужна ваша помощь!

Есть функция транслита для UTF8

PHP:
скопировать код в буфер обмена
  1.  
  2. public function _translit($string)
  3. {
  4.          
  5.         $string = strtolower($string);
  6.          
  7.         $table = array(
  8.                     'а' => 'a',
  9.                     'б' => 'b',
  10.                     'в' => 'v',
  11.                     'г' => 'g',
  12.                     'д' => 'd',
  13.                     'е' => 'e',
  14.                     'ё' => 'yo',
  15.                     'ж' => 'zh',
  16.                     'з' => 'z',
  17.                     'и' => 'i',
  18.                     'й' => 'j',
  19.                     'к' => 'k',
  20.                     'л' => 'l',
  21.                     'м' => 'm',
  22.                     'н' => 'n',
  23.                     'о' => 'o',
  24.                     'п' => 'p',
  25.                     'р' => 'r',
  26.                     'с' => 's',
  27.                     'т' => 't',
  28.                     'у' => 'u',
  29.                     'ф' => 'f',
  30.                     'х' => 'h',
  31.                     'ц' => 'c',
  32.                     'ч' => 'ch',
  33.                     'ш' => 'sh',
  34.                     'щ' => 'csh',
  35.                     'ь' => '',
  36.                     'ы' => 'y',
  37.                     'ъ' => '',
  38.                     'э' => 'e',
  39.                     'ю' => 'yu',
  40.                     'я' => 'ya',
  41.                     ',' => '_',
  42.                     ' ' => '_',
  43.                     ' - ' => '_',
  44.                     '-' => '_',
  45.         );
  46.      
  47.         $output = str_replace(array_keys($table), array_values($table), $output);
  48.  
  49.         return $output;
  50. }


Принцип работы такой, ищет символ из строки в ключах у массива и меняет на их значения.
Вопрос: А как сделать так: если символ не найден в ключе удалить символ в строке?

(Отредактировано автором: 22 Февраля, 2012 - 15:10:52)

 
 Top
Zuldek
Отправлено: 22 Февраля, 2012 - 15:13:18
Post Id


Постоянный участник


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


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




ищите каждое элемент массива в строке в теле цикла если не найдено совпадение то удаляйте Не понял
строковые функции смотрим в мануале.

(Отредактировано автором: 22 Февраля, 2012 - 15:14:12)

 
 Top
illy
Отправлено: 22 Февраля, 2012 - 15:22:11
Post Id



Участник


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


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




if(!in_array()....


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
etoYA
Отправлено: 22 Февраля, 2012 - 15:25:24
Post Id



Участник


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


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




А не лучше strtr?

PHP:
скопировать код в буфер обмена
  1.  
  2. function translate($text) {
  3.         $arr = array(
  4.                 "а" => "a",
  5.                 "б" => "b",
  6.                 "ц" => "c"
  7.         );
  8.         return strtr($text, $arr);
  9. }
  10. $text = 'абц';
  11. echo translate($text);
  12.  
 
 Top
dieGo_nk
Отправлено: 22 Февраля, 2012 - 15:31:52
Post Id



Новичок


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


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




etoYA пишет:
А не лучше strtr?

PHP:
скопировать код в буфер обмена
  1.  
  2. function translate($text) {
  3.         $arr = array(
  4.                 "а" => "a",
  5.                 "б" => "b",
  6.                 "ц" => "c"
  7.         );
  8.         return strtr($text, $arr);
  9. }
  10. $text = 'абц';
  11. echo translate($text);
  12.  



Этот скрипт не удаляет не найденные в массиве знаки

т.е если сделать так

PHP:
скопировать код в буфер обмена
  1. $text = 'абц №4"3';
  2. echo translate($text);


Вернёт abc №4"3
(Добавление)
В общем я сделал так:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function _translit($string)
  3.      {
  4.          
  5.         $string = strtolower($string);
  6.          
  7.         $table = array(
  8.                     'а' => 'a',
  9.                     'б' => 'b',
  10.                     'в' => 'v',
  11.                     'г' => 'g',
  12.                     'д' => 'd',
  13.                     'е' => 'e',
  14.                     'ё' => 'yo',
  15.                     'ж' => 'zh',
  16.                     'з' => 'z',
  17.                     'и' => 'i',
  18.                     'й' => 'j',
  19.                     'к' => 'k',
  20.                     'л' => 'l',
  21.                     'м' => 'm',
  22.                     'н' => 'n',
  23.                     'о' => 'o',
  24.                     'п' => 'p',
  25.                     'р' => 'r',
  26.                     'с' => 's',
  27.                     'т' => 't',
  28.                     'у' => 'u',
  29.                     'ф' => 'f',
  30.                     'х' => 'h',
  31.                     'ц' => 'c',
  32.                     'ч' => 'ch',
  33.                     'ш' => 'sh',
  34.                     'щ' => 'csh',
  35.                     'ь' => '',
  36.                     'ы' => 'y',
  37.                     'ъ' => '',
  38.                     'э' => 'e',
  39.                     'ю' => 'yu',
  40.                     'я' => 'ya',
  41.                     ',' => '_',
  42.                     ' ' => '_',
  43.                     ' - ' => '_',
  44.                     '-' => '_',
  45.         );
  46.  
  47.         $result = '';
  48.        
  49.         for ($i = 0; $i < strlen($string); $i++)
  50.         {
  51.             $sybmol = substr($string, $i, 1);
  52.             $src = @$table[$sybmol];
  53.            
  54.             if (!$src)
  55.             {
  56.                 $result .= '';
  57.             }
  58.             else
  59.             {
  60.                 $result .= str_replace(array_keys($table), array_values($table), $sybmol);
  61.             }
  62.         }
  63.        
  64.         return $result;
  65.     }
  66. ?>

(Добавление)
Всем спасибо)
 
 Top
etoYA
Отправлено: 22 Февраля, 2012 - 15:34:49
Post Id



Участник


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


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




dieGo_nk, это да, но он упращает ваш.
illy пишет:
if(!in_array()....

вот это удаляет
Или просто символ заменить на пустую строку

(Отредактировано автором: 22 Февраля, 2012 - 15:35:28)

 
 Top
illy
Отправлено: 22 Февраля, 2012 - 15:35:37
Post Id



Участник


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


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




Да Хорошо


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
dieGo_nk
Отправлено: 22 Февраля, 2012 - 15:45:49
Post Id



Новичок


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


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




Всем спасибо, сообщений не хватает что бы нажать спасибо)
 
 Top
illy
Отправлено: 22 Февраля, 2012 - 15:59:21
Post Id



Участник


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


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




Да Хорошо
не хватает.
набирай по-быстрее.
мне нужен рейтинг Ха-ха


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 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