类似于PHP中的explode方法,用于键值对的方法是什么?

4

PHP中是否已经存在从分隔字符串创建关联数组的函数?如果没有,最有效的方法是什么?我正在查看PayPal的新NVP API,其中请求和响应具有以下格式:

 method=blah&name=joe&id=joeuser&age=33&stuff=junk

我可以使用explode()函数将每个键值对转换为数组值,但如果我能使用类似于dictionary_explode的函数,并指定键值分隔符,则会更好,最终生成一个关联数组,例如:

Array {
 [method] => blah
 [name] => joe
 [id] => joeuser
 [age] => 33
 [stuff] => junk

我的计算机科学朋友告诉我,这个想法在其他编程语言中,如Python中已经存在,所以我想知道是否有类似的PHP函数。目前我正在考虑使用array_walk,但我更喜欢使用一些预先构建好的函数。

1个回答

12

PHP内置了一个相关函数:parse_str()

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>

注意: 我建议不要使用第一种形式(parse_str($str)),原因和register_globals一样糟糕。第二种形式(parse_str($str, $arr))总是更好的选择。


+1 几周前我发现那个函数时非常高兴的。第二个函数可以防止精心构造的查询字符串覆盖同名的全局变量。 - Doug Neiner
我真的想要一些可以定义令牌的东西(因此不限于x=y&a=b模型,而是我实际上可以创建一个传递我想要的令牌然后执行字符串替换、parse_str并返回数组的函数),所以这非常接近我想要的东西。谢谢! - Anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接