当字符串在 PHP 中包含重复键时,如何将字符串转换为关联数组?
How do I convert a string to an associative array when the string contains a duplicate key in PHP?
由于我们应用程序的构建方式,URL 查询中有时会出现重复键,例如这两个 m
键:
foo=bar&foz=baz&fom=bam&m=q50&m=350Z
然后它们被用来在 JS 中做一些事情。
我需要从这个字符串构建一个关联数组并保留 m
的第一个值,但是我尝试过的任何标准数组函数在到达第二个时都会覆盖 m
一个,例如:
$n = preg_match_all('/(\w+)=([^&$]*)/', $_SERVER['QUERY_STRING'], $matches);
for($i=0; $i<$n; $i++)
{
$params[$matches[1][$i]] = $matches[2][$i];
}
echo var_dump($params);
结果
array (size=4)
'foo' => string 'bar' (length=3)
'foz' => string 'baz' (length=3)
'fom' => string 'bam' (length=3)
'm' => string '350Z' (length=4)
有没有人知道如何保留所有其他 key/value 对但保留第一对 m
?
需要注意的是,m
不会一直出现在字符串的末尾,所以我在设置第一个[=13=后不能break
跳出循环].
在添加之前检查数组中是否已经存在具有该键的元素。
for($i=0; $i<$n; $i++)
{
if (!isset($params[$matches[1][$i]])) {
$params[$matches[1][$i]] = $matches[2][$i];
}
}
var_dump($params);
由于我们应用程序的构建方式,URL 查询中有时会出现重复键,例如这两个 m
键:
foo=bar&foz=baz&fom=bam&m=q50&m=350Z
然后它们被用来在 JS 中做一些事情。
我需要从这个字符串构建一个关联数组并保留 m
的第一个值,但是我尝试过的任何标准数组函数在到达第二个时都会覆盖 m
一个,例如:
$n = preg_match_all('/(\w+)=([^&$]*)/', $_SERVER['QUERY_STRING'], $matches);
for($i=0; $i<$n; $i++)
{
$params[$matches[1][$i]] = $matches[2][$i];
}
echo var_dump($params);
结果
array (size=4)
'foo' => string 'bar' (length=3)
'foz' => string 'baz' (length=3)
'fom' => string 'bam' (length=3)
'm' => string '350Z' (length=4)
有没有人知道如何保留所有其他 key/value 对但保留第一对 m
?
需要注意的是,m
不会一直出现在字符串的末尾,所以我在设置第一个[=13=后不能break
跳出循环].
在添加之前检查数组中是否已经存在具有该键的元素。
for($i=0; $i<$n; $i++)
{
if (!isset($params[$matches[1][$i]])) {
$params[$matches[1][$i]] = $matches[2][$i];
}
}
var_dump($params);