我需要将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...
我该怎么做?我应该使用什么正则表达式?或者有更好的方法吗?
有一种更好的方法(假设这是发送到PHP页面的数据,而不是您正在处理的其他事情)。
PHP提供了一个名为$_GET的"神奇"数组,它已经为您解析了值。
例如:
one=1&two=2&three=3
将导致此阵列:
Array ( [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>
你可以在它们之间循环,或者其他什么,你永远不必担心自己把它们都分解掉。
希望它能帮助你。
您可以将preg_split与以下模式一起使用:&(?=ident)
$result = preg_split('~&(?=ident)~', $yourstring);
正则表达式详细信息:&(?=ident)
表示&
,后跟ident
(?=..)
是一个前瞻性断言,它只执行一次检查,但不匹配任何内容。
或者使用preg_match_all:
preg_match_all('~(?<=^|&)[^&]+&[^&]+&[^&]+(?=&|$)~', $yourstring, &matches);
$result = $matches[0];
模式细节:(?<=..)
是一个后备断言
(?<=^|&)
表示字符串^
开头的或一个与号[^&]+
表示除与号之外的所有字符和一次或多次(?=&|$)
表示后面跟一个"与"或字符串$
的末尾。
或者,您可以使用分解,然后使用进行循环:
$items = explode('&', $yourstring);
for ( $i=0; $i<sizeof($items); $i += 3 ) {
$result[] = implode('&', array_slice($items, $i, 3));
}