以下為程式碼
- 代碼: 選擇全部
//動作陣列
$act_table =array(
"/kick"=>" &name 踢了 &aim 一腳"
);
//置換動作開始
if(substr($_POST['message'],0,1) == "/")
{
$str = @explode(" ",$_POST['message'],2);
if($search_action = $act_table[$str[0]])
{
$_POST['message'] = str_replace("&name",$p['p_name'],str_replace("&aim",$str[1],$search_action));
}
}
說明:
首先,先設定$act_table的內容,其中KEY為使用者輸入的動作指令(/kick 或 /hi 之類的)
接著辨別$_POST['message']的開頭是否為 "/" 開頭,若為是則進入區塊
再來,先將$_POST['message']用 " " 分開,而為了保持內容的完整性,所以只將該變數拆為兩個部分
接著再判斷$search_action是否能對應到$act_table中KEY為$str[0]的值,若取得到則將取到的內容的&name 與 &aim 置換
測試結果:
$p['p_name'] = "訪客"
1 寫:$_POST['message'] = "/kick test"
show: 訪客 踢了 test 一腳
2 寫:$_POST['message'] = "/kiss test"
show: /kiss test (取不到對應的$act_table的值,所以程式沒有做任何動作)
我覺得這個比起用迴圈來跑陣列還要來得有效率,而且也只會執行一次(最外圍部份),不會再將其他相符的部分也一起置換造成文章的錯亂
不知道各位對這個程式碼的意見如何呢?