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+DBM的同学录程序(3)
Oct 09 PHP
php error_log 函数的使用
Apr 13 PHP
php Static关键字实用方法
Jun 04 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 PHP
php中try catch捕获异常实例详解
Aug 06 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
python matlibplot绘制3D图形
2018/07/02 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
python实现字符串和数字拼接
2020/03/02 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
教师自荐书
2013/10/08 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
《雪地里的小画家》教学反思
2014/02/22 职场文书
社区服务标语
2014/07/01 职场文书
迎七一演讲稿
2014/09/12 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
高中学生自我评价范文
2014/09/23 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript