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对gzip文件或者字符串解压实例参考
Jul 25 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
Aug 20 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 PHP
php文件上传、下载和删除示例
Aug 28 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 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
数字转英文
2006/12/06 PHP
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python使用udp实现聊天器功能
2018/12/10 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
海淘母婴商城:国际妈咪
2016/07/23 全球购物
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
销售实习自我鉴定
2013/12/07 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2014年党务工作总结
2014/11/25 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server