热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数组分块函数array_chunk和array_slice

在一些场景,例如当查询出的一个数组列表元素过大时,再次进行查询效率会变慢这时候需要进行分块然后分批查询可以使用array_chunk分块array_

在一些场景,例如当查询出的一个数组列表元素过大时,再次进行查询效率会变慢

这时候需要进行分块然后分批查询

可以使用array_chunk分块
在这里插入图片描述
array_slice() 函数在数组中根据条件取出一段值,并返回
在这里插入图片描述
看一个使用案例

public function insuranceRecordOp($date){if (!empty($date)) {$start_time &#61; $date . &#39; 00:00:00&#39;;$end_time &#61; $date . &#39; 23:59:59&#39;;} else {$start_time &#61; date(&#39;Y-m-d&#39;, (time() - 24 * 60 * 60)) . &#39; 00:00:00&#39;;$end_time &#61; date(&#39;Y-m-d&#39;, (time() - 24 * 60 * 60)) . &#39; 23:59:59&#39;;}$where &#61; array(&#39;create_time&#39; &#61;> [[&#39;egt&#39;, $start_time], [&#39;elt&#39;, $end_time], &#39;and&#39;],);$od_list &#61; \Order\Model\OrderModel::odSelect($where, &#39;create_time,id&#39;, null);$od_ids &#61; array_column($od_list, &#39;id&#39;);$done_od_ids &#61; [];//$ids_chunk &#61; array_chunk($od_ids, 200);foreach (array_chunk($od_ids, 200) as $ids) {$insurance_list &#61; $this->__insurance_record_model->getInsuranceList([&#39;od_id&#39; &#61;> [&#39;in&#39;, $ids]], [&#39;od_id&#39;]);$done_od_ids &#61; array_merge($done_od_ids, array_column($insurance_list, &#39;od_id&#39;));}$od_id_list &#61; array_diff($od_ids, $done_od_ids);if (empty($od_id_list)) echo ERRNO::SUCCESS;$offset &#61; 0;$length &#61; 50;$data_count &#61; count($od_id_list);$data_list &#61; [];//分批获取数据while ($offset <$data_count) {$tmp_data &#61; array_slice($od_id_list, $offset, $length);$filters &#61; [&#39;od_id&#39; &#61;> [&#39;predicate&#39; &#61;> FILTER_PREDICATE::IN,&#39;value&#39; &#61;> array_values($tmp_data),],];$dbg &#61; [];$limit &#61; array(&#39;page_num&#39; &#61;> 0, &#39;page_size&#39; &#61;> $length);$fields &#61; ["od_id", "od_link_id", "od_basic_id", "group_id", "com_id", "order_dn", "b_tr_tr_num", "tr_num","num", "billing_date", "weight", "declared_value", "b_tr_basic_id", "order_num", "g_name","co_point", "cor_addr_info_str", "cee_addr_info_str", "od_ext_info", "entrust_num", "goods_num","b_tr_tr_num_ext", "pickup_tr_num", "od_create_time", "od_ext_info", "cor_addr_info", "cee_addr_info"];list($data_list_tmp) &#61; OrderModel::fetchOrders($fields, $filters, &#39;&#39;, $limit, null, $dbg, [], []);if (empty($data_list_tmp)) {c_log(&#39;运单od_id为:&#39; . implode(&#39;,&#39;, $data_list_tmp) . &#39;生成保单时获取昨日运单信息错误&#39;, &#39;ERROR_TRACE&#39;);//return $this->doResponse(\Basic\Cnsts\ERRNO::INVALID_ERRNO, &#39;生成保单时无法获取运单信息&#39;, $data_list_tmp);}$data_list &#61; array_merge($data_list, $data_list_tmp);$offset &#43;&#61; $length;usleep(200);}foreach ($data_list as $key &#61;> $value) {$data &#61; [&#39;info&#39; &#61;> [&#39;group_id&#39; &#61;> $value[&#39;group_id&#39;],&#39;company_id&#39; &#61;> $value[&#39;com_id&#39;]],&#39;b_info&#39; &#61;> [&#39;b_basic_id&#39; &#61;> $value[&#39;b_tr_basic_id&#39;]],&#39;tr_num&#39; &#61;> $value[&#39;b_tr_tr_num&#39;]];//$value[&#39;cor_addr_info&#39;] &#61; json_decode($value[&#39;cor_addr_info_str&#39;], true);//$value[&#39;cee_addr_info&#39;] &#61; json_decode($value[&#39;cee_addr_info_str&#39;], true);$ret_insurance &#61; $this->insurance_srv->insuranceRecordManageData($value, $data, &#39;add&#39;);if ($ret_insurance[&#39;errno&#39;] !&#61; ERRNO::SUCCESS) {c_log(&#39;运单order_num为:&#39; . $value[&#39;order_num&#39;] . &#39;生成保单错误&#39;, &#39;ERROR_TRACE&#39;);//return $this->doResponse($ret_insurance[&#39;errno&#39;], $ret_insurance[&#39;errmsg&#39;], $data_list);}}echo ERRNO::SUCCESS;}

在上诉场景中&#xff0c;都使用array_chunk分块然后循环更好


推荐阅读
  • 一、MATLAB常用的基本数学函数abs(x):纯量的绝对值或向量的长度angle(z):复数z的相角(Phaseangle)sqrt(x)࿱ ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • Halcon之图像梯度、图像边缘、USM锐化
    图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像卷积:1.模糊2.梯度3.边缘4.锐化1.视频教程:B站、 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 在Kohana 3框架中,实现最优的即时消息显示方法是许多开发者关注的问题。本文将探讨如何高效、优雅地展示flash消息,包括最佳实践和技术细节,以提升用户体验和代码可维护性。 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
author-avatar
aghcgo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有