这两天做项目出现的几个问题
今天老大剛到公司,過了以后就把我叫過去說:“客戶發郵件說,昨天做的那個訂單詳情導出功能,商品信息是累加的。。。。。。”。
猜想,出現這個問題的原因可能是因為在循環里面沒有清空上次循環遺留下來的數據。
查看了下源代碼,果然不出所料,就是因為用于存儲商品信息的字符串沒有在使用前先聲明為$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
總結
以上是生活随笔為你收集整理的这两天做项目出现的几个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 塞尔达海拉尔大桥在哪
- 下一篇: jiandongman