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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
PHP时间类完整实例(非常实用)
Dec 25 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
php取出数组单个值的方法
Mar 12 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
Node.js中child_process实现多进程
2015/02/03 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python 多线程Threading初学教程
2017/08/22 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
小学数学课题方案
2014/06/15 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
给病人的慰问信
2015/03/23 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
改进工作作风心得体会
2016/01/23 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
python析构函数用法及注意事项
2021/06/22 Python
Ruby处理CSV数据方法详解
2022/04/18 Ruby