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
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
基于php和mysql的简单的dao类实现crud操作功能
Jan 27 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP实现的购物车类实例
Jun 17 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
thinkphp5使用无限极分类
Feb 18 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 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
长波有什么东西
2021/03/01 无线电
PHP自动生成月历代码
2006/10/09 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
javascript 对象的定义方法
2007/01/10 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
Move.js入门
2017/02/08 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python中__new__与__init__方法的区别详解
2015/05/04 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python中pivot()函数基础知识点
2021/01/03 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
物流管理专业大学生自荐信
2013/10/04 职场文书
施工协议书范本
2014/04/22 职场文书
质检员岗位职责范本
2015/04/07 职场文书
网聊搭讪开场白
2015/05/28 职场文书
优质护理服务心得体会
2016/01/22 职场文书
Django如何与Ajax交互
2021/04/29 Python
Django drf请求模块源码解析
2021/06/08 Python
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript