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 相关文章推荐
第一节--面向对象编程
Nov 16 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
CI框架Session.php源码分析
Nov 03 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php数组转成json格式的方法
Mar 09 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
Yii2单元测试用法示例
Nov 12 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
Linux系统下安装PHP7.3版本
Jun 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
动态生成gif格式的图像要注意?
2006/10/09 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
Javascript之文件操作
2007/03/07 Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
使用Node.js处理前端代码文件的编码问题
2016/02/16 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
python3操作mysql数据库的方法
2017/06/23 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
python调用摄像头的示例代码
2020/09/28 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
毕业生造价工程师求职信
2013/10/17 职场文书
信息专业本科生个人的自我评价
2013/10/28 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
高中生毕业评语
2014/12/30 职场文书
处罚决定书范文
2015/06/24 职场文书
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis