Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果在另一个字母后面,则使str_替换而不是替换一个字母_Php_Arrays_String - Fatal编程技术网

Php 如果在另一个字母后面,则使str_替换而不是替换一个字母

Php 如果在另一个字母后面,则使str_替换而不是替换一个字母,php,arrays,string,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) !==

我有一个包含数学公式的字符串,比如
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移动到阵列中的第一个位置来解决这个问题,但我觉得这并不是最好的选择:)

还有其他更好的解决方案吗?

您在寻找什么

请注意,由于
strtr()
始终尝试查找尽可能长的匹配,因此它不会将
ST
的出现替换为
S$t1
(而不是
$ST
),无论
$replace\u pairs
数组的顺序如何


例如:

印刷品:

10 + 20 + 30 + 40

好的,nvm,找出原因,我很傻:)你能在你的帖子中添加一些输入和输出的例子吗?你能为未来的谷歌发布错误的地方以及你是如何修复的吗?虽然这可能是一次性的,但没有什么比遇到类似问题更令人沮丧的了,搜索时遇到了似乎有相同问题但没有发布后续信息的人。这个问题没有用,也许你可以提出删除请求?它用数字替换ST中的第一个T,所以字符串将变成S455
$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