PHP中如何将含重复键的字符串转为关联数组并保留首个键值
解决方法
你只需要在循环赋值时增加判断逻辑:如果当前遍历到的键是m且已经在关联数组中存在,就跳过本次赋值即可,其他参数的赋值逻辑保持不变。
修改后的代码如下:
$n = preg_match_all('/(\w+)=([^&$]*)/', $_SERVER['QUERY_STRING'], $matches); $params = []; for($i=0; $i<$n; $i++) { $currentKey = $matches[1][$i]; $currentValue = $matches[2][$i]; // 仅当键不是m,或者m还未被赋值时,才写入数组 if ($currentKey !== 'm' || !isset($params[$currentKey])) { $params[$currentKey] = $currentValue; } } var_dump($params);
执行后输出结果为:
array (size=4) 'foo' => string 'bar' (length=3) 'foz' => string 'baz' (length=3) 'fom' => string 'bam' (length=3) 'm' => string 'q50' (length=3)
这个方案不需要提前终止循环,不管m出现在查询字符串的任何位置,都能正确保留第一个出现的m的值,其余参数的处理逻辑和之前保持一致。
内容的提问来源于stack exchange,提问作者oxwilder
相关产品推荐
相关产品推荐

