如果跟随另一个字母,请使str_replace不替换字母

时间:2011-11-23 16:14:27

标签: php arrays string

我有一个包含数学公式的字符串,如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 个答案:

答案 0 :(得分:2)

您在寻找strtr()吗?

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

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

请注意,由于strtr()始终会尝试找到最长的匹配,因此不会将ST的出现替换为S$t1(而不是$st)您的$replace_pairs数组是如何排序的。


示例(as seen on codepad)

$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