今天老大刚到公司,过了以后就把我叫过去说:“客户发邮件说,昨天做的那个订单详情导出功能,商品信息是累加的。。。。。。”。

  猜想,出现这个问题的原因可能是因为在循环里面没有清空上次循环遗留下来的数据。

  查看了下源代码,果然不出所料,就是因为用于存储商品信息的字符串没有在使用前先声明为$pInfo = '',而是直接的$pInfo .= $product;(因为php的变量可以不声明而直接使用的)。这就导致了,第二次循环的时候,$pInfo会接着上次的$pInfo拼接起来。

同理,还容易出现错误的就是:在循环中使用数组的时候。

比如,需要使用一个数组存储信息,如果不事先把变量$arr声明为空数组array(),而直接直接 $arr[] = $arrInfo,也会出现多余数组元素的问题。

所以,在使用循环的时候,以后就需要注意了。。。

为了避免上面的问题,最简单有效的方式是:在使用一个变量之前先进行声明并初始化。

  其实,昨天在完成那个“订单详情导出”功能的时候 还出现了一个问题。

当管理员权限后台所有的订单(大约有4900多条记录)执行导出操作的时候,生成的是xls文件只有表头和一句话(原话忘记了,反正意思就是可用内存不足)。

原因是什么哪? 就是因为 我把 所有的订单详情信息都放在一个数组$list中,然后一次性写入到xls文件中。问题出来了就要解决,总不能老是让客户20条20条的往外导数据吧??

  应该怎么解决?

  问题其实很简单,既然不能把所有订单详情信息内容放在一个array中一次性的写入文件,那么我们就一条记录一条记录的写入文件。

  以前的实现方式为

  

1 function exportOrderDetail(){
2
3 ......
4
5   ......
6
7   ......
8
9   $list = array();//用于存放订单详情数据
10  
11   foreach($_POST['order_id'] as $order_id) {
12
13     $orderInfo = getOrderInfo($order_id);
14
15     $orderInfo['xx'] = getXXByOrder($order_id);
16
17     $orderInfo['yy'] = getYYByOrder($order_id);
18
19     $orderInfo['zz'] = getZZByOrder($order_id);
20
21     ...
22
23     ...
24
25     ...
26
27     $list[] = $orderInfo; //将订单信息放入数组中
28  
29   }
30
31   exportXls($list);//往xls文件中写入内容
32  
33   ......
34
35   ......
36
37   ......
38
39 }

  相信大家都已经看出问题所在了,如果订单的数量足够大的话,$list数组就会表的足够的,从而导致内存不足的问题。

  问题已经找到了,那么应该怎么解决那?

  其实很简单。直接将 31行的exportXls($list)放到foreach内部,同时,将原来foreach中的$list[] = $orderInfo 修改为$list = array($orderInfo); 即可。

上面是我这2天做项目的时候,因为没注意出现的问题,今天贴上以此为戒。。。

转载于:https://www.cnblogs.com/ainiaa/archive/2010/08/26/1808919.html

这两天做项目出现的几个问题相关推荐

  1. 共享两个做项目最常用功能操作的封装类

    (转载http://www.seaskyer.net/Index/Catalog12/223.html) 共享两个做项目最常用功能操作的封装类 一. 显示消息对话框类 做项目时总免不了要弹出对话框,或 ...

  2. apriori算法python_清华学霸亲测有效,每日自学两小时Python,学完就能做项目

    之前小编发过一些关于数据分析的文章,收到大家不少的好评,不过也有一些困惑: 入门数据分析该学哪些知识点?该看哪些书? 是从Python入手还是R语言?常用的算法有哪些? 可以练手做项目的数据库去哪里找 ...

  3. 【译】我这两年做过的小微项目

    [译]我这两年做过的小微项目 原文链接 I Spent 2 years Launching Tiny Projects[1] 两年前,当我面对着手机笔记中一长串未实现的想法,满心懊丧,于是决定开始每周 ...

  4. 如何导出项目到本地_【点滴故事】:如何做项目本地化?

    项目管理最重要的一个环节就是任命项目经理.我在出任公司OEM项目经理时,对项目管理的理论基础是零,但这不影响我管理项目.尤其在2003年,国人对追求系统化的项目管理,还是不多的公司.我们公司的项目,幸 ...

  5. 【转】做产品VS做项目

    相关定义 根据GB/T19000-2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关联或相互作用的活动 注:一个过程的输入通常是其他过程的输出 ...

  6. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...

  7. 算法练习day14——190402(贪心:切金条、做项目、会议室安排)

    1. 切金条 一块金条切成两半,是需要花费和长度数值一样的铜板的. 比如长度为20的金条, 不管切成长度多大的两半,都要花费20个铜板. 一群人想整分整块金条, 怎么分最省铜板? 例如,给定数组{10 ...

  8. Android studio导入另外一个项目作为Library后出现两个启动项目等各类问题

    首先说正确的 导入Library的方式: 1.启动AndroidStudio后,打开你需要接收Library的项目.比如有两个项目,项目A,和Library项目B,那么打开项目A. 2.在下拉菜单中依 ...

  9. STM32学了很久,我还是不会做项目。

    关注.星标公众号,不错过精彩内容 素材来源:知乎 编辑整理:张巧龙 知乎有人问: Stm32学了好久了,感觉独立做项目还是有力不从心的感觉? 从51开始学习,到stm32,目前为止差不服两年的时间了, ...

最新文章

  1. 车辆计数--FCN-rLSTM: Deep Spatio-Temporal Neural Networks for Vehicle Counting in City Cameras
  2. hibernate4连接mysql自动创建表之错误
  3. 【视频讲解】基础实验4-2.1 树的同构 (25 分)
  4. 隐藏SAP CRM WebClient UI personalization 里某个field
  5. 自定义ProgressBar(圆)
  6. 小孩用计算机做作业怎么表达,计算机作业
  7. 数据增强 transform_深度学习-Pytorch框架学习之数据处理篇
  8. mysql5.6.msi 百度云_如何安装Mysql数据库类型msi(5.6)
  9. 查看类的实现类mac_自定义类加载器实现热加载
  10. ADS 2013 momentum仿真出错
  11. 测绘——利用ExifTool提取照片exif信息【windows环境下】(信息非常全)
  12. GAEfan qiang教程
  13. 基于Keras的LSTM进行电力负荷预测
  14. std::function和std::bind用法
  15. 百度博客搜索悄然上线
  16. 高德地图 Service 创建服务 USERKEY_PLAT_NOMATCH
  17. TP5 框架 出现No input file specified.错误
  18. Qt 生成exe缺少Qt5Widgetsd.dll,找不到Qt5Cored.dll的问题解决方法
  19. armv8运行linux,ARMv8-A QEMU运行OP-TEE/ATF环境搭建
  20. 职中计算机考证是几级

热门文章

  1. Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
  2. [NOI2012(bzoj2879)(vijos1726)]美食节 (费用流)
  3. Linux设置SFTP服务用户目录权限
  4. const数组,strstr,strstr,
  5. linux 空间不够了,怎么办?Disk Requirements:At least 11MB more space needed on the / filesystem....
  6. 转 UIAlertView 不显示、屏幕变灰
  7. WPF in Visual Studio 2010
  8. 安装Tomcat6.0
  9. php如何配置apache服务器,Apache服务器如何配置PHP
  10. masm5安装教程_汇编语言程序环境搭建masm+debug64位 win10/7