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&&mysql)一
Oct 09 PHP
php访问查询mysql数据的三种方法
Oct 09 PHP
php绘制圆形的方法
Jan 24 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
Yii2中简单的场景使用介绍
Jun 02 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
PHP文件打开关闭及读写操作示例解析
Aug 06 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
详解Python中的join()函数的用法
2015/04/07 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
构建高效的python requests长连接池详解
2020/05/02 Python
django queryset相加和筛选教程
2020/05/18 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
会计助理的岗位职责
2013/11/29 职场文书
应用心理学个人求职信范文
2013/12/11 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
网络技术专业求职信
2014/07/13 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP