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]   

> Без описания
BesTime
Отправлено: 06 Июля, 2013 - 19:50:24
Post Id



Гость


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


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

[+]


Почему когда вбиваю айди 117 ищит сначало 1 потом еще 1 а потом только 7 а не сразу 117?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.   function char_class($str)
  3.   {
  4.   $str=trim($str);
  5.   $str = nl2br($str);
  6.   $str_search_id = array(
  7.        '0', '1',  '2',  '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21',
  8.            '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44',
  9.            '45', '46',  '47',  '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '88', '89',
  10.            '90', '91',  '92',  '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111',
  11.            '112', '113', '114', '115', '116', '117', '118'
  12.     );
  13.     $str_replace = array(
  14.          "Fighter","Warrior","Gladiator","Warlord", "Knight","Paladin","Dark avenger","Rogue", "Treasure hunter","Hawkeye","Mage","Wizard", "Sorcerer",
  15.                  "Necromancer","Warlock","Cleric", "Bishop","Prophet","Elven fighter","Elven knight", "Temple knight","Swordsinger","Elven scout","Plains walker",
  16.                  "Silver ranger","Elven mage","Elven wizard","Spellsinger", "Elemental summoner ","Oracle","Elder","Dark fighter", "Palus knight","Shillien knight",
  17.                  "Blad edancer","Assasin", "Abyss walker","Phantom ranger","Dark mage" ,"Dark wizard", "Spellhowler","Phantom summoner","Shil lien oracle","Shilien elder",
  18.                  "Orc fighter","Orc raider","Destroyer" ,"Orc monk", "Tyrant","Orc mage","Orc shaman","Overlord", "Warcryer","Dwarven fighter","Scavenger","Bounty hunter",
  19.                  "Artisan", "Warsmith", "Duelist", "Dreadnought", "PhoenixKnight", "HellKnight", "Sagittarius", "Adventurer", "Archmage", "Soultaker", "ArcanaLord",
  20.                  "Cardinal", "Hierophant", "EvaTemplar", "SwordMuse", "WindRider", "MoonlightSentinel", "MysticMuse", "ElementalMaster", "EvaSaint", "ShillienTemplar",
  21.                  "SpectralDancer", "GhostHunter", "GhostSentinel", "StormScreamer", "SpectralMasterr", "ShillienSaint", "Titan", "GrandKhauatari", "Dominator", "Doomcryer",
  22.                  "FortuneSeeker", "Maestro"
  23.     );
  24.   $str =preg_replace($str_search_id, $str_replace, $str);
  25.   return $str;
  26.   }
  27.   $class_id="117";
  28.   print char_class("$class_id");
  29. ?>


print char_class("$class_id"); выдает WarriorWarriorRogue
 
 Top
AlexAnder
Отправлено: 06 Июля, 2013 - 20:00:02
Post Id



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


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


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




Цитата:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash

Язычок
(Добавление)
Цитата:
Проблема с str_replace()

Цитата:
$str =preg_replace($str_search_id, $str_replace, $str);


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
OrmaJever Модератор
Отправлено: 06 Июля, 2013 - 20:01:18
Post Id



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


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


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




ну потому что в масиве находит еденицу раньше чем 117, заменяет её и снова ищет дальше с начала масива.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 06 Июля, 2013 - 20:10:25
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Потому что в строке "117" встречаются строки "1" и "7".
Используйте какие-либо более явные ограничители.

Если функция должна вернуть одно имя за вызов, то она берёт на себя слишком многое:
PHP:
скопировать код в буфер обмена
  1. function getClassNameById($iClassId) {
  2.         assert('is_numeric($iClassId)');
  3.         $iClassId = intval($iClassId);
  4.         $rgClasses = array (
  5.           0 => 'Fighter',
  6.           1 => 'Warrior',
  7.           2 => 'Gladiator',
  8.           3 => 'Warlord',
  9.           4 => 'Knight',
  10.           5 => 'Paladin',
  11.           6 => 'Dark avenger',
  12.           7 => 'Rogue',
  13.           8 => 'Treasure hunter',
  14.           9 => 'Hawkeye',
  15.           10 => 'Mage',
  16.           11 => 'Wizard',
  17.           12 => 'Sorcerer',
  18.           13 => 'Necromancer',
  19.           14 => 'Warlock',
  20.           15 => 'Cleric',
  21.           16 => 'Bishop',
  22.           17 => 'Prophet',
  23.           18 => 'Elven fighter',
  24.           19 => 'Elven knight',
  25.           20 => 'Temple knight',
  26.           21 => 'Swordsinger',
  27.           22 => 'Elven scout',
  28.           23 => 'Plains walker',
  29.           24 => 'Silver ranger',
  30.           25 => 'Elven mage',
  31.           26 => 'Elven wizard',
  32.           27 => 'Spellsinger',
  33.           28 => 'Elemental summoner ',
  34.           29 => 'Oracle',
  35.           30 => 'Elder',
  36.           31 => 'Dark fighter',
  37.           32 => 'Palus knight',
  38.           33 => 'Shillien knight',
  39.           34 => 'Blad edancer',
  40.           35 => 'Assasin',
  41.           36 => 'Abyss walker',
  42.           37 => 'Phantom ranger',
  43.           38 => 'Dark mage',
  44.           39 => 'Dark wizard',
  45.           40 => 'Spellhowler',
  46.           41 => 'Phantom summoner',
  47.           42 => 'Shil lien oracle',
  48.           43 => 'Shilien elder',
  49.           44 => 'Orc fighter',
  50.           45 => 'Orc raider',
  51.           46 => 'Destroyer',
  52.           47 => 'Orc monk',
  53.           48 => 'Tyrant',
  54.           49 => 'Orc mage',
  55.           50 => 'Orc shaman',
  56.           51 => 'Overlord',
  57.           52 => 'Warcryer',
  58.           53 => 'Dwarven fighter',
  59.           54 => 'Scavenger',
  60.           55 => 'Bounty hunter',
  61.           56 => 'Artisan',
  62.           57 => 'Warsmith',
  63.           88 => 'Duelist',
  64.           89 => 'Dreadnought',
  65.           90 => 'PhoenixKnight',
  66.           91 => 'HellKnight',
  67.           92 => 'Sagittarius',
  68.           93 => 'Adventurer',
  69.           94 => 'Archmage',
  70.           95 => 'Soultaker',
  71.           96 => 'ArcanaLord',
  72.           97 => 'Cardinal',
  73.           98 => 'Hierophant',
  74.           99 => 'EvaTemplar',
  75.           100 => 'SwordMuse',
  76.           101 => 'WindRider',
  77.           102 => 'MoonlightSentinel',
  78.           103 => 'MysticMuse',
  79.           104 => 'ElementalMaster',
  80.           105 => 'EvaSaint',
  81.           106 => 'ShillienTemplar',
  82.           107 => 'SpectralDancer',
  83.           108 => 'GhostHunter',
  84.           109 => 'GhostSentinel',
  85.           110 => 'StormScreamer',
  86.           111 => 'SpectralMasterr',
  87.           112 => 'ShillienSaint',
  88.           113 => 'Titan',
  89.           114 => 'GrandKhauatari',
  90.           115 => 'Dominator',
  91.           116 => 'Doomcryer',
  92.           117 => 'FortuneSeeker',
  93.           118 => 'Maestro',
  94.           );
  95.         return isset($rgClasses[ $iClassId ]) ? $rgClasses[ $iClassId ] : $iClassId;
  96.         }


Если функция должна заменить в неком тексте id классов на их названия - сперва сделайте какие-нибудь более явные метки, чем простое число.
Потом через preg_replace_callback вызывайте функцию-замену, вроде той, что я привёл выше.


-----
PostgreSQL DBA
 
 Top
BesTime
Отправлено: 06 Июля, 2013 - 21:43:14
Post Id



Гость


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


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

[+]


AlexAnder пишет:
Цитата:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash

Язычок
(Добавление)
Цитата:
Проблема с str_replace()

Цитата:
$str =preg_replace($str_search_id, $str_replace, $str);


preg_replace пробывал вообще почему то нечто не выводит
 
 Top
AlexAnder
Отправлено: 06 Июля, 2013 - 21:47:13
Post Id



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


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


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




до
(Добавление)
или же изначально писать в обратном порядке


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
BesTime
Отправлено: 06 Июля, 2013 - 23:16:25
Post Id



Гость


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


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

[+]


Мелкий пишет:
Потому что в строке "117" встречаются строки "1" и "7".
Используйте какие-либо более явные ограничители.

Если функция должна вернуть одно имя за вызов, то она берёт на себя слишком многое:
PHP:
скопировать код в буфер обмена
  1. function getClassNameById($iClassId) {
  2.         assert('is_numeric($iClassId)');
  3.         $iClassId = intval($iClassId);
  4.         $rgClasses = array (
  5.           0 => 'Fighter',
  6.           1 => 'Warrior',
  7.           2 => 'Gladiator',
  8.           3 => 'Warlord',
  9.           4 => 'Knight',
  10.           5 => 'Paladin',
  11.           6 => 'Dark avenger',
  12.           7 => 'Rogue',
  13.           8 => 'Treasure hunter',
  14.           9 => 'Hawkeye',
  15.           10 => 'Mage',
  16.           11 => 'Wizard',
  17.           12 => 'Sorcerer',
  18.           13 => 'Necromancer',
  19.           14 => 'Warlock',
  20.           15 => 'Cleric',
  21.           16 => 'Bishop',
  22.           17 => 'Prophet',
  23.           18 => 'Elven fighter',
  24.           19 => 'Elven knight',
  25.           20 => 'Temple knight',
  26.           21 => 'Swordsinger',
  27.           22 => 'Elven scout',
  28.           23 => 'Plains walker',
  29.           24 => 'Silver ranger',
  30.           25 => 'Elven mage',
  31.           26 => 'Elven wizard',
  32.           27 => 'Spellsinger',
  33.           28 => 'Elemental summoner ',
  34.           29 => 'Oracle',
  35.           30 => 'Elder',
  36.           31 => 'Dark fighter',
  37.           32 => 'Palus knight',
  38.           33 => 'Shillien knight',
  39.           34 => 'Blad edancer',
  40.           35 => 'Assasin',
  41.           36 => 'Abyss walker',
  42.           37 => 'Phantom ranger',
  43.           38 => 'Dark mage',
  44.           39 => 'Dark wizard',
  45.           40 => 'Spellhowler',
  46.           41 => 'Phantom summoner',
  47.           42 => 'Shil lien oracle',
  48.           43 => 'Shilien elder',
  49.           44 => 'Orc fighter',
  50.           45 => 'Orc raider',
  51.           46 => 'Destroyer',
  52.           47 => 'Orc monk',
  53.           48 => 'Tyrant',
  54.           49 => 'Orc mage',
  55.           50 => 'Orc shaman',
  56.           51 => 'Overlord',
  57.           52 => 'Warcryer',
  58.           53 => 'Dwarven fighter',
  59.           54 => 'Scavenger',
  60.           55 => 'Bounty hunter',
  61.           56 => 'Artisan',
  62.           57 => 'Warsmith',
  63.           88 => 'Duelist',
  64.           89 => 'Dreadnought',
  65.           90 => 'PhoenixKnight',
  66.           91 => 'HellKnight',
  67.           92 => 'Sagittarius',
  68.           93 => 'Adventurer',
  69.           94 => 'Archmage',
  70.           95 => 'Soultaker',
  71.           96 => 'ArcanaLord',
  72.           97 => 'Cardinal',
  73.           98 => 'Hierophant',
  74.           99 => 'EvaTemplar',
  75.           100 => 'SwordMuse',
  76.           101 => 'WindRider',
  77.           102 => 'MoonlightSentinel',
  78.           103 => 'MysticMuse',
  79.           104 => 'ElementalMaster',
  80.           105 => 'EvaSaint',
  81.           106 => 'ShillienTemplar',
  82.           107 => 'SpectralDancer',
  83.           108 => 'GhostHunter',
  84.           109 => 'GhostSentinel',
  85.           110 => 'StormScreamer',
  86.           111 => 'SpectralMasterr',
  87.           112 => 'ShillienSaint',
  88.           113 => 'Titan',
  89.           114 => 'GrandKhauatari',
  90.           115 => 'Dominator',
  91.           116 => 'Doomcryer',
  92.           117 => 'FortuneSeeker',
  93.           118 => 'Maestro',
  94.           );
  95.         return isset($rgClasses[ $iClassId ]) ? $rgClasses[ $iClassId ] : $iClassId;
  96.         }


Если функция должна заменить в неком тексте id классов на их названия - сперва сделайте какие-нибудь более явные метки, чем простое число.
Потом через preg_replace_callback вызывайте функцию-замену, вроде той, что я привёл выше.


спасибо то что нужно
 
 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