www.adminn.cn
站长正能量分享网!

PHP将两个关联数组合并函数提高函数效率

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

在foreach中循环查询数据代码量比较少,但是性能比较低,使用下面的字节写的函数可以解决。

在foreach中循环查询数据代码量比较少,但是性能比较低,好点的解决办法是将id收集起来,用in一次性查询,但是这引发了数据结构不是我们用PHP自带的函数可以合并的,今天测试了一下:

使用下面的字节写的函数可以解决

从数据库中取出来的数据总是或多或少不符合我们心目中的数据结构,类似于下面的俩个数组,要形成SQL中类似于left join后两个数组合并: 

  1. $test1 = Array(  
  2. 0 => Array(  
  3. 'id' => 9478137,  
  4. 'create_time' => 1394760724  
  5. ),  
  6. 1 => Array(  
  7. 'id' => 9478138,  
  8. 'create_time' => 1394760725  
  9. ),  
  10. 2 => Array(  
  11. 'id' => 9478138,  
  12. 'create_time' => 1394760725  
  13. )  
  14. );  
  15. $test2 = array(  
  16. 0 => array(  
  17. 'id' => 9478137,  
  18. 'message' => 'love you'  
  19. ),  
  20. 1 => array(  
  21. 'id' => 9478138,  
  22. 'message' => 'miss you'  
  23. )  
  24. );  

如果要将这两个数组,类似于sql中的left join 关联起来我们用什么函数呢?额我没有找见就自己写了,刚开始的时候,用的是嵌套循环:效率低下,代码如下:

  1. function _mergerArray($array1$array2$field1$field2 = '') {  
  2. $ret = array();  
  3. foreach($array1 as $key1 => $value1 ) {  
  4. foreach ($array2 as $key2 => $value2) {  
  5. if($value1[$field1] == $value2[$field2]) {  
  6. $ret[$key1] = array_merge($value1$value2);  
  7. }  
  8. }  
  9. }  
  10. return $ret;  
  11. }  

改进后的办法,使用数组下标,使用两次循环:形成类似于left join的方式,代码如下:

  1. $test1 = Array(  
  2. 0 => Array(  
  3. 'id' => 9478137,  
  4. 'create_time' => 1394760724  
  5. ),  
  6. 1 => Array(  
  7. 'id' => 9478138,  
  8. 'create_time' => 1394760725  
  9. ),  
  10. 2 => Array(  
  11. 'id' => 9478138,  
  12. 'create_time' => 1394760725  
  13. )  
  14. );  
  15. $test2 = array(  
  16. 0 => array(  
  17. 'id' => 9478137,  
  18. 'message' => 'love you'  
  19. ),  
  20. 1 => array(  
  21. 'id' => 9478138,  
  22. 'message' => 'miss you'  
  23. )  
  24. );  
  25.  
  26. function _mergerArray($array1$array2$field1$field2 = '') {  
  27. $ret = array();  
  28.  
  29. //使用数组下标的办法  
  30. foreach ($array2 as $key => $value) {  
  31. $array3[$value[$field1]] = $value;  
  32. }  
  33. foreach ($array1 as $key => $value) {  
  34. $ret[] = array_merge($array3[$value[$field1]], $value);  
  35. }  
  36. return $ret;  
  37. }  
  38. $ret = _mergerArray($test1$test2'id''id');  
  39. print_r($ret);exit;  

打印出来结果如下: 

  1. Array  
  2. (  
  3. [0] => Array  
  4. (  
  5. [id] => 9478137  
  6. [message] => love you  
  7. [create_time] => 1394760724  
  8. )  
  9. [1] => Array  
  10. (  
  11. [id] => 9478138  
  12. [message] => miss you  
  13. [create_time] => 1394760725  
  14. )  
  15. [2] => Array  
  16. (  
  17. [id] => 9478138  
  18. [message] => miss you  
  19. [create_time] => 1394760725  
  20. )  
  21. )  

相当于left join了吧? 

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP将两个关联数组合并函数提高函数效率》
文章链接:https://www.adminn.cn/news/6981.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

本站源码仅供本地环境下学习借鉴研究使用!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏