我想将以下字符串转换为数组:
prijs = 0209&安培;的OrderBy =价格与秩序=未定义&安培; posts_per_page =未定义
INTO
array(
[prijs] => Array
(
[0] => 0
[1] => 209
)
[orderby] => Array
(
[0] => price
)
[order] => Array
(
[0] => undefined
)
[posts_per_page] => Array
(
[0] => undefined
)
)
这样的事情。这可能吗?
现在我正在使用一些foreach
循环,但这并不像RegEx那样快速和理想
这是一个需要尽可能快地加载的脚本,因此代码中的每一点改进都可能有所帮助。
数组的数量可以是变量。但它总是两层深,如上所述。只有一个主阵列。
答案 0 :(得分: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)
答案 1 :(得分:2)
看起来你需要array_walk
,因为它应该比foreach
更快,即使它在较低级别执行的操作几乎相同。
如vascowhite建议您可以使用$_GET
,或parse_str()
获取初始array
,之后:
array_walk($array, function(&$n) {
$n = explode(',', $n);
});
完全符合您的要求(始终使用数组而不是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并查看哪一个更快
答案 2 :(得分: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);
?>
答案 3 :(得分: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);
答案 4 :(得分: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);