Привет, я использую эту функцию в 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
Кто-нибудь может посоветовать, почему это может быть?
Кроме того, можете ли вы увидеть какие-либо области, в которых эффективность этого кода может быть улучшена для ускорения процесса вращения и уменьшения использования памяти?
так как вы используете двойные кавычки вокруг вашей строки:
$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}");
Других решений пока нет …