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中simplexml_load_string函数使用说明
Jan 01 PHP
优化PHP程序的方法小结
Feb 23 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
yii的CURD操作实例详解
Dec 04 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
最新版本PHP 7 vs HHVM 多角度比较
Feb 14 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP 访问数据库配置通用方法(json)
May 20 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
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python正则表达式学习小例子
2020/03/03 Python
python实现在线翻译
2020/06/18 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
印度低票价航空公司:GoAir
2017/10/11 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
大学生求职信范文
2014/05/24 职场文书
运动员口号
2014/06/09 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书