http_build_query在PHP5中是一个很常用的函数,用来生成URL编码的查询字符串。今天让项目组的几个同事设计一个http_build_query的替代函数,目的是让他们熟悉一下递归及URL查询字符串中特殊字符的处理两个知识点,他们很快都做出来了,遗憾的是,设计得并没有我预期的理想。
这是我自己后面写的一个:
<?php
/**
* http_build_query
* @param array/object $queryData 查询数据
* @param string $numericPrefix 数字索引时附加的Key前缀
* @param string $argSeparator 参数分隔符(默认为&)
* @param string $keyPrefix Key前缀(供内部递归时用)
* @return string
*/
function http_build_query2($queryData, $numericPrefix = '', $argSeparator = '&', $keyPrefix = '') {
$arr = array();
foreach ($queryData as $key => $val) {
if ($val === NULL) {
continue;
}
if (!is_array($val) && !is_object($val)) {
if (is_bool($val)) {
$val = $val ? 1 : 0;
}
if ($keyPrefix === '') {
if (is_int($key)) {
$arr[] = $numericPrefix . urlencode($key) . '=' . urlencode($val);
} else {
$arr[] = urlencode($key) . '=' . urlencode($val);
}
} else {
$arr[] = urlencode($keyPrefix . '[' . $key . ']') . '=' . urlencode($val);
}
} else {
if ($keyPrefix === '') {
$newKeyPrefix = $key;
} else {
$newKeyPrefix = $keyPrefix . '[' . $key . ']';
}
$arr[] = call_user_func_array(__FUNCTION__, array($val, $numericPrefix, $argSeparator, $newKeyPrefix));
}
}
return implode($argSeparator, $arr);
}
$arr = array(
'string1' => 'hello world',
'string2' => '中国 深圳',
'int' => 9527,
'float' => 9999.88,
'true' => true,
'false' => false,
'1.2' => 'a',
1 => 'A',
-1 => 'B',
'array' => array(
'key' => 'val',
2 => array(
'A' => 'a',
3 => '33',
'user' => array(
'name' => 'Lucy',
'age' => 25,
'set' => 'female',
)
)
),
'null' => NULL,
);
echo http_build_query($arr, 'prefix[', '&');
echo '<br />';
echo '<br />';
echo http_build_query2($arr, 'prefix[', '&');
?>
我们很喜欢追求高深的技术,但往往忽略了一些简单的技术,以至于设计出来的程序,总是不尽人意。。。
其实,技术是在于我们平时的积累,多写,多思考,多领悟。。。
分享到:
相关推荐
从对象(JavaScript中php的http_build_query())生成URL编码的查询字符串。 安装: $ npm install http-build-query 用法: var httpBuildQuery = require ( 'http-build-query' ) ; // Simple using var obj = ...
本文实例讲述了PHP使用http_build_query()构造URL字符串的方法。分享给大家供大家参考,具体如下: 简单来说,http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理。 ...
PHP后备函数http_build_url() 对于没有安装 pecl_http 包的服务器。 见 基于 pecl_http-1.7.6 的原始 C 代码 使用了 Sébastien Corne 的一些片段。 版本:1.7.6 作者:Ivan Tcholakov ,2014 许可证:MIT...
主要介绍了PHP函数http_build_query使用详解,分别对传入一维关联数组、一维索引数组、二维数组、传入对象等给出示例,需要的朋友可以参考下
http_build_url, 为 http_build_url() 提供无需pecl_http的项目功能 用于PHP的 http_build_url() 这个简单的库为 http_build_url() 插件提供了在没有的环境下的功能。 它的目的是模仿in函数的功能,并带有一套针对...
假如这里的$data是 复制代码 代码如下: $data = array( ‘name’=>’scofield’, ‘time’=>’2012-2-3’ ) 接下来,需要先将$data变成字符串 $post_data = http_build_query($data); 而采用 http_build_query 转换...
PHP用法http_build_query()构造URL字符串的方法_.docx
Patreon_Build_AndroidBeastBeat_V0.0.5a.apk
2020最新DeepFaceLab Windows客户端 官方20201103发布的RTX3000 专版,全网唯一支持最新RTX3000显卡的版本。 支持最新RTX 3000系列显卡的...一共6个分卷DeepFaceLab_RTX_3000_build_001-DeepFaceLab_RTX_3000_build_006
1649551476174114_20220314124400_ninegame_v7.8.1.1_build_220307202844_release.apk
MachineExpertBasic_V1.0_SP2_build64454.exe
EVEREST_Ultimate_Edition_5.50_Build_2253_Beta.rar
2020最新DeepFaceLab Windows客户端 官方20201103发布的RTX3000 专版,全网唯一支持最新RTX3000显卡的版本。 支持最新RTX 3000系列显卡的...一共6个分卷DeepFaceLab_RTX_3000_build_001-DeepFaceLab_RTX_3000_build_006
20220118211002_ninegame_v7.7.3.0_build_220118204949_release.apk
EhLib_8.1_Build_8.1.023_Full_Source_D7-XE10.1,全部源码,支持最新的XE10.1 BERLIN
这个dxwnd窗口化工具中文汉化版v2_04_46_build可以窗口化大部分不能窗口化的游戏。
Cisco PacketTracer800_Build212_64bit_setup-signed.exe
sublime-text_build-3083_i386