我需要将我的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 :(得分:0)
您可以使用此模式使用 preg_split :&(?=ident)
$result = preg_split('~&(?=ident)~', $yourstring);
正则表达式详细信息:&(?=ident)
表示 &
后跟ident
(?=..)
是一个先行断言,仅执行检查但不匹配任何内容。
或使用 preg_match_all :
preg_match_all('~(?<=^|&)[^&]+&[^&]+&[^&]+(?=&|$)~', $yourstring, &matches);
$result = $matches[0];
模式细节:(?<=..)
是一个外观断言
(?<=^|&)
表示前面是字符串^
的开头或&符号。
[^&]+
表示除&符号之外的所有字符一次或多次
(?=&|$)
表示后跟一个&符号或字符串$
的结尾。
或者您可以使用 explode ,然后使用 for 循环:
$items = explode('&', $yourstring);
for ( $i=0; $i<sizeof($items); $i += 3 ) {
$result[] = implode('&', array_slice($items, $i, 3));
}
答案 1 :(得分:0)
有一种更好的方法(假设这是发送到您的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>
你可以在他们身上或其他任何地方循环,你永远不必担心将它们全部分开。
希望它对你有所帮助。