1

我想将以下字符串转换为数组:

prijs=0,209&orderby=price&order=undefined&posts_per_page=undefined

进入

array(
  [prijs] => Array
        (
            [0] => 0
            [1] => 209
        )
  [orderby] => Array
        (
            [0] => price
        )
  [order] => Array
        (
            [0] => undefined
        )  
  [posts_per_page] => Array
        (
            [0] => undefined
        )  
)

类似的东西。那可能吗?
现在我正在使用一些foreach循环,但这不像 RegEx 那样快速和理想。
这是一个需要尽可能快地加载的脚本,因此代码中的每一点改进都可能会有所帮助。

数组的数量可以是可变的。但它总是有 2 层深,就像上面一样。而且只有一个主阵列。

4

5 回答 5

3

为此,您不需要 REGEX。您显示的字符串看起来像一个 URL 查询字符串,在这种情况下 $_GET 将已经包含您需要的值:-

var_dump($_GET);

应该给你:-

array (size=4)
  'prijs' => string '0,209' (length=5)
  'orderby' => string 'price' (length=5)
  'order' => string 'undefined' (length=9)
  'posts_per_page' => string 'undefined' (length=9)

否则,您可以使用parse_string()

$values = array();
parse_str('prijs=0,209&orderby=price&order=undefined&posts_per_page=undefined', $values);
var_dump($values);

输出:

array (size=4)
  'prijs' => string '0,209' (length=5)
  'orderby' => string 'price' (length=5)
  'order' => string 'undefined' (length=9)
  'posts_per_page' => string 'undefined' (length=9)
于 2013-10-05T12:35:02.963 回答
2

看起来您需要它,array_walk因为它应该比 a 更快,foreach即使它在较低级别上做的事情几乎相同。

正如vascowhite建议的那样,$_GET如果你有它或parse_str()得到一个首字母,你可以使用它array,之后:

array_walk($array, function(&$n) { 
  $n = explode(',', $n); 
}); 

实时代码:http: //3v4l.org/YfuKs

得到你想要的结果(总是有数组而不是 CSV 字符串):

Array
(
    [prijs] => Array
        (
            [0] => 0
            [1] => 209
        )

    [orderby] => Array
        (
            [0] => price
        )

    [order] => Array
        (
            [0] => undefined
        )

    [posts_per_page] => Array
        (
            [0] => undefined
        )

)

PS:而不是explode()你可以使用preg_split('/,/', $n),因为你提到了RegEx,看看哪个对你来说更快

于 2013-10-05T13:17:52.267 回答
1

好吧,你可以使用这样的东西:

    <?php
    parse_str("prijs=0,209&orderby=price&order=undefined&posts_per_page=undefined",$myArray);
    $myArray['prijs'] = explode(",", $myArray['prijs']);
    $myArray['orderby'] = explode(",", $myArray['orderby']);
    $myArray['order'] = explode(",", $myArray['order']);
    $myArray['posts_per_page'] = explode(",", $myArray['posts_per_page']);
    print_r($myArray);
    ?>
于 2013-10-05T12:15:19.187 回答
1
$str = 'prijs=0,209&orderby=price&order=undefined&posts_per_page=undefined';

$array = preg_split('/[&]/' , $str);

foreach ($array as $a)
{
    $a = preg_split('/[=]/' , $a);
    $a[1] = preg_split('/[,]/' , $a[1]);
}

var_dump($array);
于 2013-10-05T12:22:00.720 回答
0
function urlSplitter($input)
{
    $step1Array = explode('&', $input);
    $result = array();

    foreach($step1Array as $element)
    {
        $parts = explode("=", $element);
        $result[$parts[0]] = explode(",", $parts[1]);
    }

    return $result;
}

$result = urlSplitter("prijs=0,209&orderby=price&order=undefined&posts_per_page=undefined");
var_dump($result);
于 2013-10-05T12:23:32.600 回答