0

我有一个爆炸输入的脚本,见下文:

$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;
}

我偶然发现了一个问题,说用户要使用“/mute Steve 500 For being an idiot”——它会返回给我"Mute Steve for 500 seconds because For",而不是为我提供完整的理由,因为我使用过$message[3],我在问你这个:

之后我如何退回所有东西$message[2]

我是否必须运行一个 foreach 循环,将所有单词组合在一起,还是有更简单的方法?

抱歉,如果很难理解,我会尽力解释,但这是一个很难解释的话题。

4

3 回答 3

1

之后我如何退回所有东西$message[2]

array_slice(...)像这样使用:

$reason = join(' ', array_slice($message, 2));
于 2012-09-25T23:05:30.137 回答
1

您可以使用 array_slice 轻松完成此操作 - http://php.net/manual/en/function.array-slice.php

在你的情况下,

$reason = implode(' ', array_slice($message, 3));
于 2012-09-25T23:05:39.173 回答
0

如果您可以$message以稍微不同的方式格式化,那会容易得多。如果您的消息看起来像这样,而不是使用空格(然后在它们上爆炸):

/ban||Steve||500||For being an idiot

然后你可以像这样在双管上爆炸:

$message = explode("||", $_GET['message']);

并且您的其余代码将按预期工作。如果您根本无法更改正在发送的消息,它将变得更加棘手,您将不得不使用循环、第二次内爆或一些正则表达式来实现这一点。

于 2012-09-25T23:07:34.457 回答