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采集相关教程之一 CURL函数库
Feb 15 PHP
php正则表达式(regar expression)
Sep 10 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
php遍历CSV类实例
Apr 14 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
详解PHP中array_rand函数的使用方法
Sep 11 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
php查看session内容的函数
2008/08/27 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php使用glob函数快速查询指定目录文件的方法
2014/11/15 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
Postman无法正常返回结果问题解决
2020/08/28 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
2018/06/04 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
通过实例解析python描述符原理作用
2020/01/22 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
软件工程师岗位职责
2013/11/16 职场文书
无故旷工检讨书
2014/01/26 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
会计工作检讨书
2015/02/19 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
Docker安装MySql8并远程访问的实现
2022/07/07 Servers