-1

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

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

4

2 回答 2

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));
} 
于 2013-08-02T19:43:08.240 回答
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>

您可以遍历它们全部或其他任何内容,并且您永远不必担心自己将它们全部分开。

希望它可以帮助你。

于 2013-08-02T19:49:58.550 回答