Заставьте str_replace не заменять букву, если следует за другой буквой - PullRequest
2 голосов
/ 23 ноября 2011

У меня есть строка, которая содержит математическую формулу, например T + ST + s + t ...

Я заменяю все эти буквенные идентификаторы числами, используя:

$ids = array(
    'T'    => $t1,
    'ST',  => $st,
    's',   => $s1,
    't',   => $t2,
    'N',   => 1,     
);

foreach ($ids as $id => $value) {
    if (strpos($formula, $id) !== false) {
        $formula = str_replace($id, $value, $formula);
    }
}

Что нормальнов определенных ситуациях.Но если в начале формулы есть ST, я получаю строку типа S345324 ..

. Я исправил это, переместив ST в первую позицию в моем массиве, но я чувствую, что это не самый лучший вариант :)

Есть ли другие "более приятные" решения?

1 Ответ

2 голосов
/ 23 ноября 2011

Вы ищете strtr()?

$ids = array(
  'T'    => $t1,
  'ST'   => $st,
  's'    => $s1,
  't'    => $t2,
  'N'    => 1,     
);

$formula = strtr($formula, $ids);

Обратите внимание, что, поскольку strtr() всегда пытается найти максимально возможное совпадение, он не заменит вхождения ST с S$t1 (вместо $st), независимо от того, как упорядочен массив $replace_pairs.


Пример (как видно на кодовой панели) :

$ids = array(
  'T'    => 10,
  'ST'   => 20,
  's'    => 30,
  't'    => 40,
  'N'    => 1,     
);

$formula = 'T + ST + s + t';
echo strtr($formula, $ids);

Отпечатки:

10 + 20 + 30 + 40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...