解析格式不正确的 URL 查询字符串,其中重复键缺少 []

问题描述 投票:0回答:4

我的字符串类似于以下格式:

$string = "name=xxx&id=11&name=yyy&id=12&name=zzz&id=13&name=aaa&id=10";

我想像下面这样分割字符串:

$str[0] = "name=xxx&id=11";
$str[1] = "name=yyy&id=12";
$str[2] = "name=zzz&id=13";
$str[3] = "name=aaa&id=10";

如何在 PHP 中执行此操作?

php query-string string-parsing
4个回答
8
投票

试试这个:

$matches = array();
preg_match_all("/(name=[a-zA-Z0-9%_-]+&id=[0-9]+)/",$string,$matches);

$matches
现在是一个包含您想要的字符串的数组。

更新

function get_keys_and_values($string /* i.e. name=yyy&id=10 */) {
  $return = array();
  $key_values = split("&",$string);
  foreach ($key_values as $key_value) {
    $kv_split = split("=",$key_value);
    $return[$kv_split[0]] = urldecode($kv_split[1]);
  }
  return $return;
}

3
投票
$string = "name=xxx&id=11&name=yyy&id=12&name=zzz&id=13&name=aaa&id=10";
$arr = split("name=", $string);

$strings = aray();
for($i = 1; $i < count($arr), $i++){
    $strings[$i-1] = "name=".substr($arr[$i],0,-1);
}

结果将在 $strings 中


3
投票

我建议使用更简单的术语

这是一个例子

$string = "name=xxx&id=11;name=yyy&id=12;name=zzz&id=13;name=aaa&id=10";
$arr = explode(";",$string); //here is your array

-1
投票

如果你想做你要求的事情,不多不少,那就是explode('&', $string)。

如果你的示例搞砸了,并且你有一个 HTTP 查询字符串,那么你需要查看 parse_str()。

© www.soinside.com 2019 - 2024. All rights reserved.