如果 str_replace 跟在另一个字母后面,则不替换该字母

发布于 2024-12-18 02:17:17 字数 536 浏览 0 评论 0原文

我有一个包含数学公式的字符串,例如 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 移动到数组中的第一个位置来修复此问题,但我觉得这 还有其他“更好”的解决方案吗?

I have a string which contains a math formula, like T + ST + s + t ...

I'm replacing all those letter identifiers with numbers using:

$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);
    }
}

Which is ok in certain situations.
But if the formula has ST at the beginning I get a string like S345324 ..

I fixed this by moving ST in the first position in my array, but I feel it's not really the best option :)

Are there any other "nicer" solutions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

允世 2024-12-25 02:17:17

您是否在寻找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

Are you looking for strtr()?

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

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

Note that since strtr() always tries to find the longest possible match, it won't replace occurrences of ST with S$t1 (instead of $st), regardless of how your $replace_pairs array is ordered.


Example (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);

Prints:

10 + 20 + 30 + 40
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文