【问题标题】:Method for key-value pair similar to explode in php?php中类似explode的键值对方法?
【发布时间】:2011-01-11 03:13:08
【问题描述】:

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

}

我的 CS 朋友告诉我,这个想法存在于 Python 等其他语言中,所以我想知道我是否还没有为 PHP 找到这样的东西。现在我正在考虑做一个 array_walk,但我更喜欢预先构建的东西。

【问题讨论】:

    标签: php arrays dictionary


    【解决方案1】:

    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 几周前我遇到这个功能时非常高兴。第二个函数防止精心设计的查询字符串覆盖同名的全局变量。
    • 我真的想要一些可以定义标记的东西(因此不限于 x=y&a=b 模型,但我实际上可以创建一个函数来传递我想要的标记然后执行字符串替换然后 parse_str 并返回数组,所以这非常接近我的想法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2011-05-14
    • 2018-11-12
    • 2019-12-08
    相关资源
    最近更新 更多