我有一个爆炸输入的脚本,见下文:
$message = explode(" ", $_GET['message']);
switch($message[0])
{
case "/commands":
echo "N/A";
break;
case "/mute":
$player = $message[1];
$time = $message[2]; // seconds
$reason = $message[3];
echo "Mute {$player} for {$time} seconds because {$reason}";
break;
default:
echo "Invalid command";
break;
}
我偶然发现了一个问题,说用户要使用“/静音史蒂夫500作为一个白痴” - 它会回到我"Mute Steve for 500 seconds because For"
,而不是向我提供完整的理由,因为我'使用$message[3]
,我问你这个:
如何在$message[2]
之后返回所有内容?
我是否必须运行foreach循环,将所有单词组合在一起,还是有更简单的方法?
很抱歉,如果这很难理解,我会尽力解释,但这是一个难以解释的主题。
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用array_slice - http://php.net/manual/en/function.array-slice.php
轻松完成此任务在你的情况下,
$reason = implode(' ', array_slice($message, 3));
答案 2 :(得分:0)
如果您可以稍微不同的方式格式化$message
,那将会更容易。如果您的消息如下所示,而不是使用空格(然后在它们上爆炸):
/ban||Steve||500||For being an idiot
然后你可以像这样在双管道上爆炸:
$message = explode("||", $_GET['message']);
并且其余代码将按预期工作。如果您根本无法更改正在发送的消息,那么它将变得更加棘手,您将不得不使用循环,第二次内爆或一些正则表达式来实现此目的。