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中通过smtp发邮件的类,测试通过
Jan 22 PHP
PHP Ajax中文乱码问题解决方法
Feb 27 PHP
PHP 批量删除数据的方法分析
Oct 30 PHP
php去除重复字的实现代码
Sep 16 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
php创建sprite
Feb 11 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php中session定期自动清理的方法
Nov 12 PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
基于PHP-FPM进程池探秘
Oct 17 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
Python发送Email方法实例
2014/08/21 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
Python使用combinations实现排列组合的方法
2018/11/13 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
JAVA程序员面试题
2012/10/03 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
保护地球的标语
2014/06/17 职场文书
政府个人对照检查材料
2014/08/28 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2014年创卫工作总结
2014/11/24 职场文书
项目验收申请报告
2015/05/15 职场文书