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 02 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
php MessagePack介绍
Oct 06 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
php的一些小问题
2010/07/03 PHP
php读取excel文件的简单实例
2013/08/26 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
php生成短域名函数
2015/03/23 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
php7下的filesize函数
2019/09/30 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
python交互式图形编程实例(二)
2017/11/17 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python实现验证码识别功能
2018/06/07 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
社区十八大感言
2014/01/19 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
行政文员岗位职责
2015/02/04 职场文书
神秘岛读书笔记
2015/07/01 职场文书
学雷锋感言
2015/08/03 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis