您好我在PHP中使用此功能来创建一些旋转内容(使用spintax)。但是,如果spintax包含$(美元符号),则会在输出中删除它们。
function spintext($s){
preg_match('#\{(.+?)\}#is',$s,$m);
if(empty($m)) return $s;
$t = $m[1];
if(strpos($t,'{')!==false){
$t = substr($t, strrpos($t,'{') + 1);
}
$parts = explode("|", $t);
$s = preg_replace("+\{".preg_quote($t)."\}+is", $parts[array_rand($parts)], $s, 1);
return spintext($s);
}
$out = spintext("Spinning a dollar sign: {$200|$400|$300}");
echo $out;
结果:
Spinning a dollar sign: 0
有人可以建议为什么会这样吗? 此外,您能看到任何可以提高此代码效率的区域,以加快旋转过程并减少内存使用量吗?
答案 0 :(得分:2)
因为你在字符串周围使用双引号:
$out = spintext("Spinning a dollar sign: {$200|$400|$300}");
PHP将解析并尝试在输出字符串之前用变量内容替换它们。
(另外,这个应该抛出错误,因为变量永远不应该以数字开头。)
您需要使用单引号(文字)
$out = spintext('Spinning a dollar sign: {$200|$400|$300}');
或逃避美元符号\$
。
$out = spintext("Spinning a dollar sign: {\$200|\$400|\$300}");