2012-09-25 3 views
0

두 번째 폭발 배열 한 후 모든 에코, 아래 참조 : 나는 문제에 발견 한PHP - I는 입력을 폭발하는 스크립트를 가지고

$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) - 내가 $message[3]을 사용한 적이 있기 때문에, 전체 이유로 저를 제공하는 대신 나 "Mute Steve for 500 seconds because For"을 돌려 보낼 것, 내가 당신에게 부탁 해요이 :

어떻게 $message[2] 후 모든 반환합니까?

모든 단어를 결합하여 foreach 루프를 실행해야합니까, 아니면 더 쉬운 방법이 있습니까?

죄송합니다. 이해하기 어려운 경우 가능한 최선을 설명하려고 시도했지만 설명하기 어려운 주제입니다.

+0

실제로 var_dump ($ message [3])를 실행하여 실제로 아무것도 포함되어 있지 않은지 확인 했습니까? 또는 더 나은 아직 모든 것을보기 위해'var_dump ($ message)'를 실행하십시오. – Xhynk

+0

'/ ban'은 어디에서 왔습니까? –

+0

배열의 내용에 아무 문제가 없습니다. 단지 $ message [2] 다음에 오는 모든 것을 연결하려고합니다. @RichardJPLeGuen; 오타가되었습니다. – user1698717

답변

1

당신은 array_slice 쉽게 그 작업을 수행 할 수 - 당신이에 $message를 포맷 할 수있는 경우

$reason = implode(' ', array_slice($message, 3)); 
+0

+1 - 나는 내 대답에서'implode (...)'호출을 무시했다 : ( –

+0

완벽하게 일했다, 고마워! – user1698717

1

$message[2] 이후의 모든 것을 어떻게 반환합니까?

사용 array_slice(...)과 같이 :

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

흠, 아마 그들에게'join()'해야 할 것입니다 ... –

+0

좋아요, 고마워요.이 함수를 살펴 보겠습니다. – user1698717

0

, 귀하의 경우에는 http://php.net/manual/en/function.array-slice.php

약간 다른 방식으로, 훨씬 쉬울 것입니다.

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

그런 다음이 같은 이중 파이프에 폭발 할 수 : 오히려 귀하의 메시지가이처럼 보였다 경우 (그들에 폭발 후와) 공간을 사용하는 것보다

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

및 코드의 나머지 것 예상대로 작동합니다. 보내지는 메시지를 전혀 변경할 수 없다면, 처리가 더 복잡해지며 루프를 사용하거나 두 번째 붕괴 또는 일부 정규 표현식을 사용해야합니다.