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
Форумы портала PHP.SU :: Версия для печати :: Проблема с str_replace()
Форумы портала PHP.SU » » Вопросы новичков » Проблема с str_replace()

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

1. BesTime - 06 Июля, 2013 - 19:50:24 - перейти к сообщению
Почему когда вбиваю айди 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
2. AlexAnder - 06 Июля, 2013 - 20:00:02 - перейти к сообщению
Цитата:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash

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

Цитата:
$str =preg_replace($str_search_id, $str_replace, $str);
3. OrmaJever - 06 Июля, 2013 - 20:01:18 - перейти к сообщению
ну потому что в масиве находит еденицу раньше чем 117, заменяет её и снова ищет дальше с начала масива.
4. Мелкий - 06 Июля, 2013 - 20:10:25 - перейти к сообщению
Потому что в строке "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 вызывайте функцию-замену, вроде той, что я привёл выше.
5. BesTime - 06 Июля, 2013 - 21:43:14 - перейти к сообщению
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 пробывал вообще почему то нечто не выводит
6. AlexAnder - 06 Июля, 2013 - 21:47:13 - перейти к сообщению
есть вариант
до
PHP:
скопировать код в буфер обмена
  1. замены()

(Добавление)
или же изначально писать в обратном порядке
7. BesTime - 06 Июля, 2013 - 23:16:25 - перейти к сообщению
Мелкий пишет:
Потому что в строке "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 вызывайте функцию-замену, вроде той, что я привёл выше.


спасибо то что нужно

 

Powered by ExBB FM 1.0 RC1