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 相关文章推荐
怎么使 Mysql 数据同步
Oct 09 PHP
几个php应用技巧
Mar 27 PHP
PHP 得到根目录的 __FILE__ 常量
Jul 23 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
php静态文件生成类实例分析
Jan 03 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
php多文件打包下载的实例代码
Jul 12 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
PHP中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php实现三级级联下拉框
2016/04/17 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现身份证号码解析
2015/09/01 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
基于python实现计算两组数据P值
2020/07/10 Python
Python中qutip用法示例详解
2020/10/02 Python
python中操作文件的模块的方法总结
2021/02/04 Python
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
大学生毕业自我评价范文分享
2013/11/11 职场文书
促销活动计划书
2014/05/02 职场文书
企业负责人任命书
2014/06/05 职场文书
国际金融专业自荐信
2014/07/05 职场文书
大学生个人求职信例文
2014/07/07 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
浅谈克隆 JavaScript
2021/11/02 Javascript