0

嗨,我在 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

谁能告诉我为什么会这样?此外,您能否看到可以提高此代码效率以加快旋转过程并减少内存使用的任何区域?

4

1 回答 1

3

当您在字符串周围使用双引号时:

$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}");
于 2016-05-16T12:58:03.370 回答