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を馬鹿にするために」を使用することになっていたと言います-"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']);

残りのコードは期待どおりに機能します。送信されるメッセージをまったく変更できない場合は、トリッキーになり、これを実現するには、ループ、2番目の内破、または正規表現を使用する必要があります。

于 2012-09-25T23:07:34.457 に答える