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 相关文章推荐
BBS(php & mysql)完整版(二)
Oct 09 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
php后门URL的防范
Nov 12 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
xtree.js 代码
2007/03/13 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
Python多线程爬虫简单示例
2016/03/04 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
python之mock模块基本使用方法详解
2019/06/27 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
python 实现多维数组(array)排序
2020/02/28 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
工作保证书怎么写
2015/02/28 职场文书
培训通知
2015/04/17 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python
Python内置数据结构列表与元组示例详解
2021/08/04 Python