2013-08-02 1 views
-1

GET 문자열을 일부 배열로 분할해야합니다. 문자열은 다음과 같습니다GET 문자열 분할

ident[0]=<IDENT_0>&value[0]=<VALUE_0>&version[0]=<VERSION_0>&....&ident[N]=<IDENT_N>&value[N]=<VALUE_N>&version[N]=<VERSION_N> 

그래서,이 같은 모든 세 번째 앰퍼샌드 문자로 문자열을 분할해야합니다

ident[0]=<IDENT_0>&value[0]=<VALUE_0>&version[0]=<VERSION_0> 
ident[1]=<IDENT_1>&value[1]=<VALUE_1>&version[1]=<VERSION_1> and so on... 

내가 어떻게 할 수 있습니까? 어떤 정규식을 사용해야합니까? 아니면 여기에 더 좋은 방법이 있습니까?

답변

0

당신이 패턴 preg_split를 사용할 수 있습니다 &(?=ident)

$result = preg_split('~&(?=ident)~', $yourstring); 

정규식 세부 : &(?=ident)&ident

(?=..) 다음에 의미하는 것은 단지 확인 만을 수행하는 내다 주장이다 아무것도 일치하지 .

또는 으로, preg_match_all 사용 :

preg_match_all('~(?<=^|&)[^&]+&[^&]+&[^&]+(?=&|$)~', $yourstring, &matches); 
$result = $matches[0]; 

패턴 상세 : (?<=..)

(?<=^|&) 문자열 ^ 또는 앰퍼샌드의 시작에 선행 을 의미 lookbehind 주장을한다.
[^&]+은 앰퍼샌드를 제외한 모든 문자가
을 의미합니다.
(?=&|$)을 의미하고 뒤에는 앰퍼샌드 또는 $ 문자열의 끝을 의미합니다. 다음

또는 당신은 폭발 사용할 수 있으며, 루프 :

$items = explode('&', $yourstring); 
for ($i=0; $i<sizeof($items); $i += 3) { 
    $result[] = implode('&', array_slice($items, $i, 3)); 
} 
+0

은 (는) 표현 당신이 쓴 '~ & (? = ident) ~'그것은 무엇을 의미합니까? 매 3 번째 앰퍼샌드로 나눌 필요가 있습니다 ... –

+0

많은 감사합니다 :) 두 변종은 잘 작동합니다. –

0

이 있습니다 더 좋은 방법 (이것이 당신의 PHP 페이지로 데이터를 전송되는 가정이 아닌 다른 일이 당신에게 ' 다시 다루고).

PHP는 이미 값을 파싱 한 $_GET이라는 "마법"배열을 제공합니다.

Array ([one] => 1 [two] => 2 [three] => 3) 

그래서 당신과 같이 변수에 액세스 할 수 있습니다 :

one=1&two=2&three=3 

이 배열 될 것이다 : 예를 들어

당신은 배열 인덱스를 제공하는 경우

$oneValue = $_GET['one']; // answer is 1 
$twoValue = $_GET['two']; // and so on 

하는 당신의보기는, 당신을 위해 그 (것)들을 또한 밖으로 분류 할 것이다.그래서 같을 것이다 $_GET 위의 예제를 사용합니다 :

Array 
(
    [ident] => Array 
     (
      [0] => <IDENT_0> 
      [N] => <IDENT_N> 
     ) 

    [value] => Array 
     (
      [0] => <VALUE_0> 
      [N] => <VALUE_N> 
     ) 

    [version] => Array 
     (
      [0] => <VERSION_0> 
      [N] => <VERSION_N> 
     ) 
) 

그렇게처럼를 검색 할 수 있습니다 그래서, 당신의 N 키가 실제로 수있을 것입니다 가정 것 :

$_GET['ident'][0]  // => <IDENT_0> 
$_GET['value'][0]  // => <VALUE_0> 
$_GET['version'][0] // => <VERSION_0> 

당신은 그 (것)들을 전부 또는 무엇 이건을 전부 통과 할 수 있고, 당신은 그 (것)들을 전부 밖으로 나누기에 관하여 결코 고민 할 필요 없을 것이다.

희망이 있으면 도움이됩니다.