http_build_query用法,挺方便的

http_build_query

(PHP 5)

http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( array formdata [, string numeric_prefix] )

使用给出的关联(或下标)数组生成一个 url-encoded 请求字符串。参数 formdata 可以是数组或包含属性的对象。一个formdata 数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数,此参数值将会作为基础数组中的数字下标元素的前缀。这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。

例子 1. http_build_query() 使用示例

<?php 
$data = array(‘foo‘=>‘bar‘, 
              ‘baz‘=>‘boom‘, 
              ‘cow‘=>‘milk‘, 
              ‘php‘=>‘hypertext processor‘); 
echo http_build_query($data); 
/* 输出: 
       foo=bar&baz=boom&cow=milk&php=hypertext+processor 
*/ 
?>

例子 2. http_build_query() 使用数字下标的元素

<?php 
$data = array(‘foo‘, ‘bar‘, ‘baz‘, ‘boom‘, ‘cow‘ => ‘milk‘, ‘php‘ =>‘hypertext processor‘); 
echo http_build_query($data); 
/* 输出: 
       0=foo&1=bar&2=baz&3=boom&cow=milk&php=hypertext+processor 
*/ 
echo http_build_query($data, ‘myvar_‘); 
/* 输出: 
       myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor 
*/ 
?>

例子 3. http_build_query() 使用复杂的数组

<?php 
$data = array(‘user‘=>array(‘name‘=>‘Bob Smith‘, 
                            ‘age‘=>47, 
                            ‘sex‘=>‘M‘, 
                            ‘dob‘=>‘5/12/1956‘), 
              ‘pastimes‘=>array(‘golf‘, ‘opera‘, ‘poker‘, ‘rap‘), 
              ‘children‘=>array(‘bobby‘=>array(‘age‘=>12, 
                                               ‘sex‘=>‘M‘), 
                                ‘sally‘=>array(‘age‘=>8, 
                                               ‘sex‘=>‘F‘)), 
              ‘CEO‘); 
echo http_build_query($data, ‘flags_‘); 
/* 输出:(为了可读性对其进行了折行) 
       user[name]=Bob+Smith&user[age]=47&user[sex]=M&user[dob]=5%1F12%1F1956& 
       pastimes[0]=golf&pastimes[1]=opera&pastimes[2]=poker&pastimes[3]=rap& 
       children[bobby][age]=12&children[bobby][sex]=M&children[sally][age]=8& 
       children[sally][sex]=F&flags_0=CEO 
    注意:只有基础数组中的数字下标元素“CEO”才获取了前缀,其它数字下标元素(如 
    pastimes 下的元素)则不需要为了合法的变量名而加上前缀。 
*/ 
?>

例子 4. http_build_query() 使用对象

<?php 
class myClass { 
   var $foo; 
   var $baz; 
   function myClass() { 
    $this->foo = ‘bar‘; 
    $this->baz = ‘boom‘; 
   } 

$data = new myClass(); 
echo http_build_query($data); 
/* 输出: 
       foo=bar&baz=boom 
*/ 
?>

简单来说,http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理。

还是引用一下官方的解释:

http_build_query

http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( array formdata [, string numeric_prefix] )

使用给出的关联(或下标)数组生成一个 url-encoded 请求字符串。参数 formdata 可以是数组或包含属性的对象。一个 formdata 数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数,此参数值将会作为基础数组中的数字下标元素的前缀。这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。

还是看一些简单的例子吧:

01 $data array(
02     ‘foo‘=>‘bar‘,
03     ‘baz‘=>‘boom‘,
04     ‘site‘=>‘www.nowamagic.net‘,
05     ‘name‘=>‘nowa magic‘);
06      
07 echo http_build_query($data);
08  
09 /* output
10     foo=bar&baz=boom&cow=milk&php=hypertext+processor
11 */

如果是索引数组与关联数组混合而成的数组又如何呢?

01 $data array(
02     ‘foo‘,
03     ‘bar‘,
04     ‘site‘=>‘www.nowamagic.net‘,
05     ‘name‘=>‘nowa magic‘);
06      
07 echo http_build_query($data);
08  
09 /* output
10     0=foo&1=bar&site=www.nowamagic.net&name=nowa+magic
11 */

它会自动添加数字索引。

http_build_query 还有一个参数,可以给数字索引加前缀,我们再试试:

01 $data array(
02     ‘foo‘,
03     ‘bar‘,
04     ‘site‘=>‘www.nowamagic.net‘,
05     ‘name‘=>‘nowa magic‘);
06      
07 echo http_build_query($data"nm_");
08  
09 /* output
10     nm_0=foo&nm_1=bar&site=www.nowamagic.net&name=nowa+magic
11 */

再复杂一些的数组又如何呢?比如二维数组什么的。

01 $data array(
02     ‘user‘=>array(   ‘name‘=>‘Bob Smith‘,
03                     ‘age‘=>47,
04                     ‘sex‘=>‘M‘,
05                     ‘dob‘=>‘5/12/1956‘),
06       ‘pastimes‘=>array(‘golf‘‘opera‘‘poker‘‘rap‘),
07       ‘children‘=>array(‘bobby‘=>array(‘age‘=>12,
08                                        ‘sex‘=>‘M‘),
09                         ‘sally‘=>array(‘age‘=>8,
10                                        ‘sex‘=>‘F‘)),
11       ‘CEO‘);

它的输出结果则是:

1 user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M&user%5Bdob%5D=5%2F12%2F1956
2 &pastimes%5B0%5D=golf&pastimes%5B1%5D=opera&pastimes%5B2%5D=poker
3 &pastimes%5B3%5D=rap&children%5Bbobby%5D%5Bage%5D=12&children%5Bbobby%5D%5Bsex%5D=M
4 &children%5Bsally%5D%5Bage%5D=8&children%5Bsally%5D%5Bsex%5D=F&0=CEO

为了可读性对其进行了折行:

1 user[name]=Bob+Smith&user[age]=47&user[sex]=M&user[dob]=5%1F12%1F1956&
2 pastimes[0]=golf&pastimes[1]=opera&pastimes[2]=poker&pastimes[3]=rap&
3 children[bobby][age]=12&children[bobby][sex]=M&children[sally][age]=8&
4 children[sally][sex]=F&flags_0=CEO

注意:只有基础数组中的数字下标元素“CEO”才获取了前缀,其它数字下标元素(如 pastimes 下的元素)则不需要为了合法的变量名而加上前缀。

不只是数组,连对象也能转化为URL字符串:

01 class myClass {
02    var $foo;
03    var $baz;
04    function myClass() {
05     $this->foo = ‘bar‘;
06     $this->baz = ‘boom‘;
07    }
08 }
09 $data new myClass();
10      
11 echo http_build_query($data);

末尾,再提几个函数,很可能在你搜索 http_build_query 时需要了解的:

  • parse_str:将一个url ?后面的参数转换成一个数组,array parse_str(url,arr)。
  • parse_url:将一个完整的url解析成数组,array parse_url(string url)。
  • http_build_query:再简要解释下,将一个数组转换成url ?后面的参数字符串,会自动进行urlencode处理,string http_build_query ( array formdata [, string numeric_prefix]),后面的给数组中没有指定键或者键为数字的加下标。
时间: 2024-12-09 05:16:47

http_build_query用法,挺方便的的相关文章

iOS开发-UIButton详解

UIButton算是最基本的一个控件了,不过有的时候用法挺多关于UIButton文字的位置,字体大小,字体的颜色 1.设置UIButton字体大小,尤其注意不要使用直接调用setFont: [self.playButton.titleLabel setFont:[UIFont systemFontOfSize:14]]; 2.UIButton默认背景是白色的,如果文字默认颜色是白色的,是看不到文字的,设置标题颜色: [self.playButton setTitleColor:[UIColor

R函数详解

字符串连接函数paste 1.字符串连接:paste(..., sep = " ", collapse = NULL)sep表示分隔符,默认为空格.collapse表示如果不指定值,那么函数paste的返回值是自变量之间通过sep指定的分隔符连接后得到的一个字符型向量:如果为其指定了特定的值,那么自变量连接后的字符型向量会再被连接成一个字符串,之间通过collapse的值分隔 (1) paste函数把它的自变量连成一个字符串,中间用空格分开,如 > paste("Hel

MongoDB学习笔记~以匿名对象做为查询参数,方便查询子对象

对于MongoDB的封装还在继续,对于不断追求简单的编程还在继续,对于喜欢代码的那么感觉,还在继续... 当你的mongo数据表里有子对象时,尤其是列表对象时,使用官方的驱动很是不爽,要记得很多新的对象类型,麻烦,所以,将它进行封装,让GetModel支持匿名参数! 表结构可能是这样 希望查询的语句变成这样 看了上面的语句感觉挺酷吧,呵呵,下面看一下实现的代码,今天下午写的,呵呵! public IEnumerable<TEntity> GetModel<U>(U template

NodeJS中的require和import

ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口. 不把require和import整清楚,会在未来的标准编程中死的很难看. require时代的模块 node编程中最重要的思想之一就是模块,而正是这个思想,让JavaScript的大规模工程成为可能.模块化编程在js界流行,也是基于此,随后在浏览器端,req

第十章 Python常用标准库使用(必会)

本章涉及标准库: 1.sys 2.os 3.glob 4.math 5.random 6.platform 7.pikle与cPikle 8.subprocess 9.Queue 10.StringIO 11.logging 12.ConfigParser 13.urllib与urllib2 14.json 15.time 16.datetime 10.1 sys 1)sys.argv 命令行参数. argv[0] #代表本身名字 argv[1] #第一个参数 argv[2] #第二个参数 ar

VS 2012 C# 5.0 规范:迭代器

本文内容 枚举器 enumerator 接口 可枚举 enumerable 接口  产生类型 yield type 枚举器 enumerator 对象  可枚举 enumerable 对象  示例 参考资料 使用迭代器块实现的函数成员称为迭代器 (iterator). 只要相应函数成员的返回类型是枚举器接口 enumerator 或可枚举接口 enumerable 之一,迭代器块就可用作该函数成员的函数体.它可以作为 method-body.operator-body 或 accessor-bo

chineseChess

最近学习了chineseChess的Qt实现,把一些东西总结一下: 实现功能: 1.人人对战 2.人机对战 3.网络版 一.基础性工作:(人人对战) 1.棋盘和棋子的绘制(QPinter,drawLine(QPoint(0,0),QPoint(0,9))): 棋盘: 10行,9列,中间有楚河汉界:九宫格:兵和炮的梅花位置. 棋子:32颗棋子都是由圆圈和汉字组成:drawStone(painter, i) 注意:1.死棋不画  if(_s[id]._dead)   return; 2.线:pain

R绘图字体解决方案(转)

COS论坛里面经常会遇到的一个问题就是绘图时中文字体怎么解决.最初,一个流行的方法是使用family = "GB1",但一般这样做出来的图比较难看,而且并没有完全解决问题.后来发现了Cairo包,喜大普奔,但后来又发现它选字体的时候不太明确,也就是说我不知道怎样才能选中我想要的那个字体.再然后,Winston Chang写了extrafont包,功能很完善,但需要系统里面安装Ghostscript.我是懒人,不想花时间在配置Ghostscript上,于是写了一个叫做showtext的包

R语言paste应用

1.字符串连接:paste(..., sep = " ", collapse = NULL)     sep表示分隔符,默认为空格.collapse表示如果不指定值,那么函数paste的返回值是自变量之间通过sep指定的分隔符连接后得到的一个字符型向量:如果为其指定了特定的值,那么自变量连接后的字符型向量会再被连接成一个字符串,之间通过collapse的值分隔 (1) paste函数把它的自变量连成一个字符串,中间用空格分开,如 > paste("Hello"