我有一个包含数学公式的字符串,如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来修复此问题,但我觉得这不是最好的选择:)
还有其他“更好”的解决方案吗?
答案 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
数组是如何排序的。
$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