【发布时间】:2021-11-23 09:06:21
【问题描述】:
由于我们的应用程序的构建方式,有时在 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)
有没有人知道如何保留所有其他键/值对但保留第一个 m?
需要注意的是m不会总是出现在字符串的末尾,所以在我设置了第一个m之后,我不能break跳出循环。
【问题讨论】:
-
这是一个 XY 问题。不要试图破解格式不合适的查询字符串的解决方案。相反,请修复查询字符串,这样您就不需要破解解决方案。
-
我不拥有形成查询字符串的进程。
标签: php associative-array