regex — PHP Почему удаляются знаки $

Привет, я использую эту функцию в 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

Решение

так как вы используете двойные кавычки вокруг вашей строки:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]