PHP将两个关联数组合并函数提高函数效率


Posted in PHP onMarch 18, 2014

在foreach中循环查询数据代码量比较少,但是性能比较低,好点的解决办法是将id收集起来,用in一次性查询,但是这引发了数据结构不是我们用PHP自带的函数可以合并的,今天测试了一下:

使用下面的字节写的函数可以解决

从数据库中取出来的数据总是或多或少不符合我们心目中的数据结构,类似于下面的俩个数组,要形成SQL中类似于left join后两个数组合并:

$test1 = Array( 
0 => Array( 
'id' => 9478137, 
'create_time' => 1394760724 
), 
1 => Array( 
'id' => 9478138, 
'create_time' => 1394760725 
), 
2 => Array( 
'id' => 9478138, 
'create_time' => 1394760725 
) 
); 
$test2 = array( 
0 => array( 
'id' => 9478137, 
'message' => 'love you' 
), 
1 => array( 
'id' => 9478138, 
'message' => 'miss you' 
) 
);

如果要将这两个数组,类似于sql中的left join 关联起来我们用什么函数呢?额我没有找见就自己写了
刚开始的时候,用的是嵌套循环:效率低下
function _mergerArray($array1, $array2, $field1, $field2 = '') { 
$ret = array(); 
foreach($array1 as $key1 => $value1 ) { 
foreach ($array2 as $key2 => $value2) { 
if($value1[$field1] == $value2[$field2]) { 
$ret[$key1] = array_merge($value1, $value2); 
} 
} 
} 
return $ret; 
}

改进后的办法,使用数组下标,使用两次循环:形成类似于left join的方式
$test1 = Array( 
0 => Array( 
'id' => 9478137, 
'create_time' => 1394760724 
), 
1 => Array( 
'id' => 9478138, 
'create_time' => 1394760725 
), 
2 => Array( 
'id' => 9478138, 
'create_time' => 1394760725 
) 
); 
$test2 = array( 
0 => array( 
'id' => 9478137, 
'message' => 'love you' 
), 
1 => array( 
'id' => 9478138, 
'message' => 'miss you' 
) 
); function _mergerArray($array1, $array2, $field1, $field2 = '') { 
$ret = array(); 
//使用数组下标的办法 
foreach ($array2 as $key => $value) { 
$array3[$value[$field1]] = $value; 
} 
foreach ($array1 as $key => $value) { 
$ret[] = array_merge($array3[$value[$field1]], $value); 
} 
return $ret; 
} 
$ret = _mergerArray($test1, $test2, 'id', 'id'); 
print_r($ret);exit;

打印出来结果如下:
Array 
( 
[0] => Array 
( 
[id] => 9478137 
[message] => love you 
[create_time] => 1394760724 
) 
[1] => Array 
( 
[id] => 9478138 
[message] => miss you 
[create_time] => 1394760725 
) 
[2] => Array 
( 
[id] => 9478138 
[message] => miss you 
[create_time] => 1394760725 
) 
)

相当于left join了吧?
PHP 相关文章推荐
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
浅析PHP中Session可能会引起并发问题
Jul 23 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
解决php表单重复提交实现方法
Sep 29 PHP
php实现微信发红包功能
Jul 13 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 06 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 #PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 #PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 #PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 #PHP
PHP的password_hash()使用实例
Mar 17 #PHP
PHP5各个版本的新功能和新特性总结
Mar 16 #PHP
使用PHP生成二维码的两种方法(带logo图像)
Mar 14 #PHP
You might like
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
你应该知道的python列表去重方法
2017/01/17 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Python循环实现n的全排列功能
2019/09/16 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
应届大学生求职的自我评价
2013/11/17 职场文书
优秀教师工作感言
2014/02/16 职场文书
党员批评与自我批评
2014/10/15 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
优秀党员事迹材料
2014/12/18 职场文书
刑事起诉书范文
2015/05/19 职场文书
民间借贷借条如何写
2015/05/26 职场文书
表扬信范文
2019/04/22 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP