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 木马攻击防御技巧
Jun 13 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
php构造函数的继承方法
Feb 09 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 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
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
Jquery选择子控件"大于号"和" "区别介绍及使用示例
2013/06/25 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
python 内置函数汇总详解
2019/09/16 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python之变量类型和if判断方式
2020/05/05 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
劳资人员岗位职责
2013/12/19 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
利用python调用摄像头的实例分析
2021/06/07 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python