拆分GET字符串

时间:2013-08-02 19:35:44

标签: php arrays preg-match-all explode preg-split

我需要将我的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...

我该怎么办?我应该使用什么正则表达式?或者在这里有更好的方法吗?

2 个答案:

答案 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>

你可以在他们身上或其他任何地方循环,你永远不必担心将它们全部分开。

希望它对你有所帮助。