PHP - 在第二个爆炸阵列之后回显所有内容

时间:2012-09-25 23:00:34

标签: php arrays explode

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

$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循环,将所有单词组合在一起,还是有更简单的方法?

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

3 个答案:

答案 0 :(得分:1)

  

如何在$message[2]之后返回所有内容?

像这样使用array_slice(...)

$reason = join(' ', array_slice($message, 2));

答案 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']);

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