2016-05-16 63 views
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 

誰能勸這可能是爲什麼? 另外,您是否可以看到可以改進此代碼效率的任何區域,以加快旋轉過程並減少內存使用量?

+0

DOLAR標誌是變量的一部分,如果你想保持它的輸出,你可以使用單引號'或$符號\ $ – Richard

回答

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}"); 
+0

感謝您的指針之前逃脫。 那麼我在哪裏分配文本作爲變量,例如: '$ texttospin =「旋轉美元符號:{\ $ 200 | \ $ 400 | \ $ 300}」; $ out = spintext($ texttospin);' –

+0

呢?不明白你的意思 – DevDonkey

相關問題