Subversion Repositories qbpwcf-lib(archive)

Rev

Rev 915 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
844 liveuser 6
    Copyright (C) 2015~2025 Min-Jhin,Chen
1 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
248 liveuser 25
 
26
/*
27
類別說明:
28
用於處理csv格式檔案的類別.
29
備註:
30
無.
31
*/
1 liveuser 32
class csv{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#參考資料:
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	*/
47
	public function __call($method,$arguments){
48
 
49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
51
 
52
		#設置執行不正常
53
		$result["status"]="false";
54
 
55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
57
 
58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
60
 
61
		#回傳結果
62
		return $result;
63
 
64
		}#function __call end
65
 
66
	/*
67
	#函式說明:
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
69
	#回傳結果:
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
71
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
72
	#$result["function"],當前執行的函式名稱.
73
	#必填參數:
74
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
75
	#$arguments,陣列,為呼叫方法時所用的參數.
76
	#參考資料:
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
78
	*/
79
	public static function __callStatic($method,$arguments){
80
 
81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
83
 
84
		#設置執行不正常
85
		$result["status"]="false";
86
 
87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
89
 
90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
92
 
93
		#回傳結果
94
		return $result;
95
 
96
		}#function __callStatic end
97
 
98
	/*
42 liveuser 99
	#函式說明:
1 liveuser 100
	#快速建立一個csv檔案,並且要求使用者下載。
42 liveuser 101
	#回傳結果:
1 liveuser 102
	#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
103
	#$result["error"],錯誤訊息陣列.
104
	#$result["function"],取得當前執行的函數名稱
105
	#$result["content"],輸出的csv檔案位置.
106
	#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置
42 liveuser 107
	#必填參數:
108
	#$conf["dataArray"],字串陣列,要寫入的文字.$conf["dataArray"][$i],代表第 $i 行的內容,$conf["dataArray"][$i][$j],代表第 $i 第 $j個欄位的內容.
109
	$conf["dataArray"]=array();
1 liveuser 110
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
111
	$conf["fileArgu"]=__FILE__;
42 liveuser 112
	#可省略參數:
1 liveuser 113
	#$conf["csvFilePathAndName"]="";#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.
114
	#$conf["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置,預設為"true".
183 liveuser 115
	#參考資料:
1 liveuser 116
	#http://php.net/manual/en/function.str-split.php
117
	#http://php.net/manual/en/function.fputcsv.php
42 liveuser 118
	#備註:
1 liveuser 119
	#可用fputcsv涵式替代
120
	#建議增加自動判斷是否要建立csv檔路徑所需的資料夾
121
	*/
122
	public static function create(&$conf){
123
 
124
		#初始化要回傳的變數
125
		$result=array();
126
 
127
		#初始化當前執行的函數名稱
128
		$result["funciton"]=__FUNCTION__;
129
 
130
		#如果 $conf 不為陣列
131
		if(gettype($conf)!="array"){
132
 
133
			#設置執行失敗
134
			$result["status"]="false";
135
 
136
			#設置執行錯誤訊息
137
			$result["error"][]="\$conf變數須為陣列形態";
138
 
139
			#如果傳入的參數為 null
140
			if($conf==null){
141
 
142
				#設置執行錯誤訊息
143
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
144
 
145
				}#if end
146
 
147
			#回傳結果
148
			return $result;
149
 
150
			}#if end
151
 
152
		#檢查參數
153
		#函式說明:
154
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
155
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
156
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
157
		#$result["function"],當前執行的函式名稱.
158
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
159
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
160
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
161
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
162
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
163
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
164
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
165
		#必填寫的參數:
166
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
167
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
168
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
169
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("dataArray","fileArgu");
170
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
171
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
172
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
173
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
174
		#可以省略的參數:
175
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
176
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
177
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
178
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("csvFilePathAndName","noDownload");
179
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
180
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
181
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
182
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"true");
183
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
184
		#$conf["arrayCountEqualCheck"][]=array();
185
		#參考資料來源:
186
		#array_keys=>http://php.net/manual/en/function.array-keys.php
187
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
188
		unset($conf["variableCheck::checkArguments"]);
189
 
190
		#如果檢查失敗
191
		if($checkResult["status"]=="false"){
192
 
193
			#設置執行不正常
194
			$result["status"]="false";
195
 
196
			#設置錯誤訊息
197
			$result["error"]=$checkResult;
198
 
199
			#回傳結果
200
			return $result;
201
 
202
			}#if end			
203
 
204
		#如果檢查不通過
205
		if($checkResult["passed"]=="false"){
206
 
207
			#設置執行不正常
208
			$result["status"]="false";
209
 
210
			#設置錯誤訊息
211
			$result["error"]=$checkResult;
212
 
213
			#回傳結果
214
			return $result;
215
 
216
			}#if end
217
 
218
		#如果 $conf["csvFilePathAndName"] 沒有設置
219
		if(!isset($conf["csvFilePathAndName"])){
220
 
221
			#預設爲系統時間
222
			#涵式說明:
223
			#回傳RFC822格式的當前時間,格式會像這種 「Wed, 25 Jan 12 19:13:15 +0800」
224
			#回傳的結果:
225
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
226
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
227
			#$result["function"],當前執行的函式名稱.
228
			#$result["content"],RFC822格式的時間.
229
			#必填的參數:
230
			$conf["time"]["get_RFC822_Time"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php
231
				#ex:"Asia/Taipei"
232
			$systemTime=time::get_RFC822_Time($conf["time"]["get_RFC822_Time"]);
233
			unset($conf["time"]["get_RFC822_Time"]);
234
 
235
			#如果取得時間失敗
236
			if($systemTime["status"]=="false"){
237
 
238
				#設置執行不正常
239
				$result["status"]="false";
240
 
241
				#設置錯誤訊息
242
				$result["error"]=$systemTime;
243
 
244
				#回傳結果
245
				return $result;
246
 
247
				}#if end
248
 
249
			#設定檔案名稱
250
			$conf["csvFilePathAndName"]=$systemTime;
251
 
252
			}#if end
253
 
254
		#加上副檔名csv
255
		$conf["csvFilePathAndName"]=$conf["csvFilePathAndName"].".csv";
256
 
257
		/*
258
 
259
		#檢查 $conf["csvFilePathAndName"] 是否含有 "/"
260
		#函式說明:
261
		#檢查字串裡面有無指定的關鍵字
262
		#回傳的結果:
263
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
264
		#$result["error"],錯誤訊息
265
		#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
266
		#$result["keyWordCount"],找到的關鍵字數量.
267
		#必填的參數:
268
		$conf["search.findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字
269
		$conf["search.findKeyWord"]["string"]=$conf["csvFilePathAndName"];#要被搜尋的字串內容
270
		#可省略的參數:
271
		#$conf["search.findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
272
		$searchResult=search::findKeyWord($conf["search.findKeyWord"]);
273
		unset($conf["search.findKeyWord"]);
274
 
275
		#如果搜尋失敗
276
		if($searchResult["status"]=="false"){
277
 
278
			#設置執行異常
279
			$result["status"]="false";
280
 
281
			#設置錯誤訊息
282
			$result["error"]=$searchResult;
283
 
284
			#回傳結果
285
			return $result;
286
 
287
			}#if end
288
 
289
		#如果csv的檔案位置含有 "/" 
290
		if($searchResult["founded"]=="true"){
291
 
292
			#用 "/" 去分割csv檔案路徑字串
293
			#涵式說明:
294
			#將固定格式的字串分開,並回傳分開的結果。
295
			#回傳的參數:
296
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
297
			#$result["error"],錯誤訊息陣列
298
			#$result["oriStr"],要分割的原始字串內容
299
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
300
			#$result["dataCounts"],爲總共分成幾段
301
			#必填的參數:
302
			$conf["stringProcess.spiltString"]["stringIn"]=$conf["csvFilePathAndName"];#要處理的字串。
303
			$conf["stringProcess.spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
304
			#備註:
305
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
306
			$stringSpiltResult=stringProcess::spiltString($conf["stringProcess.spiltString"]);
307
			unset($conf["stringProcess.spiltString"]);
308
 
309
			#如果分割csv的檔案位置路徑字串失敗
310
			if($stringSpiltResult["status"]=="false"){
311
 
312
				#設置執行異常
313
				$result["status"]="false";
314
 
315
				#設置錯誤訊息
316
				$result["error"]=$searchResult;
317
 
318
				#回傳結果
319
				return $result;
320
 
321
				}#if end
322
 
323
			#初始化檔案路徑變數
324
			$filePath="";	
325
 
326
			#將資料夾路徑字串組合起來,剔除csv檔的名稱。
327
			for($i=0;$i<$stringSpiltResult["dataCounts"]-1;$i++){
328
 
329
				#串聯路徑
330
				$filePath=$filePath.$stringSpiltResult["dataArray"][$i];
331
 
332
				#如果不是最後一筆
333
				if($i!=$stringSpiltResult["dataCounts"]-2){
334
 
335
					#串聯路徑
336
					$filePath=$filePath."/";
337
 
338
					}#if end
339
 
340
				}#for end
341
 
342
			#涵式說明:
343
			#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限.
344
			#回傳的結果:
345
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
346
			#$result["error"],錯誤訊息陣列
347
			#必填的參數:
348
			$conf["fileAccess.createFolderAfterCheck"]["dirPositionAndName"]=$filePath;#新建的位置與名稱
349
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
350
			$conf["fileAccess.createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];
351
			#可省略的參數:
352
			#$conf["fileAccess.createFolderAfterCheck"]["dirPermission"]="";#新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
353
			$pathCreateResult=fileAccess::createFolderAfterCheck($conf["fileAccess.createFolderAfterCheck"]);
354
			unset($conf["fileAccess.createFolderAfterCheck"]);
355
 
356
			#如果 建立資料夾路徑失敗
357
			if($pathCreateResult["status"]=="false"){
358
 
359
				#設置執行異常
360
				$result["status"]="false";
361
 
362
				#設置錯誤訊息
363
				$result["error"]=$pathCreateResult;
364
 
365
				#回傳結果
366
				return $result;
367
 
368
				}#if end
369
 
370
			}#if end
371
 
372
		*/
373
 
374
		#var_dump($conf["csvFilePathAndName"]);
375
 
376
		#建立csv檔案
377
		#涵式說明:
378
		#將字串寫入到檔案
379
		#回傳的結果:
380
		#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
381
		#$result["error"],錯誤訊息陣列.
382
		#必填的參數:
383
		$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱
384
		$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
385
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
386
		$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
387
		#可省略的參數:
388
		#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
389
		$createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
390
		unset($conf["fileAccess"]["writeTextIntoFile"]);
391
 
392
		#如果 $createStatus["status"] 等於 "false"
393
		if($createStatus["status"]=="false"){
394
 
395
			#設置錯誤識別
396
			$result["status"]="false";
397
 
398
			#設置錯誤訊息
399
			$result["error"]=$createStatus;
400
 
401
			#回傳結果
402
			return $result;
403
 
404
			}#if end
405
 
406
		#依據陣列組數寫入置檔案中
407
		for($i=0;$i<count($conf["dataArray"]);$i++){
408
 
409
			#如果該列資料不存在
410
			if(!isset($conf["dataArray"][$i])){
411
 
412
				#跳到下個迴圈
413
				continue;
414
 
415
				}#if end
416
 
417
			#取得該筆資料有幾個欄位
418
			$thisDataCotainElementsCount=count($conf["dataArray"][$i]);
419
 
420
			#計數用的變數
421
			$temp=0;
422
 
423
			#針對每一組
424
			foreach($conf["dataArray"][$i] as $key=>$value){
425
 
426
				#如果不是最後一個元素
427
				if($temp!=$thisDataCotainElementsCount-1){
428
 
429
					#涵式說明:
430
					#將字串寫入到檔案
431
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
432
					#$result["error"],錯誤訊息陣列.
433
					#必填的參數:
434
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱
435
 
436
					#檢測$value的開頭與結尾是否有皆爲「"」
437
 
438
					#將每欄的內容一個個字分開
439
					$strArray=str_split($value,1);
440
 
441
					#取得裏面有幾個元素
442
					$strArrayElementCount=count($strArray);
443
 
444
					#如果第一個元素爲「"」
445
					if($strArray[0]=="\""){
446
 
447
						#如果元素數量大於2
448
						if($strArrayElementCount>2){
449
 
450
							#如果最後一個元素爲「"」
451
							if($strArray[$strArrayElementCount-1]=="\""){
452
 
453
								#寫入欄位時不用加上「"」
454
								$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value.",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
455
 
456
								#檢查變數內容
457
								#var_dump($conf["fileAccess"]["writeTextIntoFile"]["inputString"]);
458
 
459
								}#if end
460
 
461
							}#if end
462
 
463
						#元素內容小於2
464
						else{
465
 
466
							#寫入欄位時不用加上「"」
467
							$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value.",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
468
 
469
							}#else end
470
 
471
						}#if end
472
 
473
					#反之第一個元素不爲「"」
474
					else{
475
 
476
						#檢查變數內容
477
						#var_dump($value);
478
 
479
						$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="\"".$value."\",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
480
 
481
						}#else end
482
 
483
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
484
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
485
					#可省略的參數:
486
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
487
					$createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
488
					unset($conf["fileAccess"]["writeTextIntoFile"]);
489
 
490
					#計數用的變數加1
491
					$temp++;
492
 
493
					#如果 $createStatus["status"] 等於 "false"
494
					if($createStatus["status"]=="false"){
495
 
496
						#設置錯誤識別
497
						$result["status"]="false";
498
 
499
						#設置錯誤訊息
500
						$result["error"]=$createStatus;
501
 
502
						#回傳結果
503
						return $result;
504
 
505
						}#if end
506
 
507
					}#if end
508
 
509
				#反之爲最後一個元素
510
				else{
511
 
512
					#檢測$value的開頭與結尾是否有皆爲「"」
513
 
514
					#將每欄的內容一個個字分開
515
					$strArray=str_split($value,1);
516
 
517
					#取得裏面有幾個元素
518
					$strArrayElementCount=count($strArray);
519
 
520
					#如果第一個元素爲「"」
521
					if($strArray[0]=="\""){
522
 
523
						#如果元素數量大於2
524
						if($strArrayElementCount>2){
525
 
526
							#如果倒數第2個元素爲「"」
527
							if($strArray[$strArrayElementCount-1]=="\""){
528
 
529
								#寫入欄位時不用加上「"」
530
								$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
531
 
532
								}#if end
533
 
534
							}#if end
535
 
536
						#元素內容小於2
537
						else{
538
 
539
							#寫入欄位時不用加上「"」
540
							$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
541
 
542
							}#else end
543
 
544
						}#if end
545
 
546
					#反之第一個元素不爲「"」
547
					else{
548
 
549
						$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="\"".$value."\"\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
550
 
551
						}#else end
552
 
553
					#寫入時加上換行符號
554
					#涵式說明:
555
					#將字串寫入到檔案
556
					#回傳的結果:
557
					#$result,true表示檔案建立成功,false表示檔案建立失敗
558
					#必填的參數:
559
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱
560
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
561
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
562
					#可省略的參數:
563
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
564
					$createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
565
					unset($conf["fileAccess"]["writeTextIntoFile"]);
566
 
567
					#如果 $createStatus["status"] 等於 "false"
568
					if($createStatus["status"]=="false"){
569
 
570
						#設置錯誤識別
571
						$result["status"]="false";
572
 
573
						#設置錯誤訊息
574
						$result["error"]=$createStatus;
575
 
576
						#回傳結果
577
						return $result;
578
 
579
						}#if end
580
 
581
					}#else end
582
 
583
				}#foreach end
584
 
585
			#函數說明:
586
			#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.
587
			#回傳結果:
588
			#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
589
			#$result["error"],錯誤訊息陣列.
590
			#$result["function"],當前執行的函數名稱.
591
			#必填參數:
592
			#$conf["sec"],整數,要延長多少執行時間,單位爲秒
593
			$conf["config::delayRunTimeExectionMax"]["sec"]=300;
594
			#參考資料:
595
			#http://php.net/manual/en/function.set-time-limit.php
596
			$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);
597
			unset($conf["config::delayRunTimeExectionMax"]);
598
 
599
			#如果執行失敗
600
			if($delayRunTimeExectionMax["status"]==="false"){
601
 
602
				#設定類別圖繪製失敗
603
				$result["status"]="false";			
604
 
605
				#設定該檔案的類別圖繪製失敗提示
606
				$result["error"]=$delayRunTimeExectionMax;
607
 
608
				#回傳結果
609
				return $result;
610
 
611
				}#if end
612
 
613
			}#for end
614
 
615
		#修改產生好的csv檔權限
616
		$chmodResult=chmod($conf["csvFilePathAndName"],0775);
617
 
618
		#如果修改檔案權限失敗
619
		if($chmodResult==FALSE){
620
 
621
			#設置錯誤識別
622
			$result["status"]="false";
623
 
624
			#設置錯誤訊息
625
			$result["error"][]="檔案「".$conf["csvFilePathAndName"]."」的權限變更失敗";
626
 
627
			#回傳結果
628
			return $result;
629
 
630
			}#if end
631
 
632
		#如果 $conf["noDownload"] 有設置
633
		if(isset($conf["noDownload"])){
634
 
635
			#如果 $conf["noDownload"] 等於 true
636
			if($conf["noDownload"]=="true"){
637
 
638
				#設置執行正常
639
				$result["status"]="true";
640
 
641
				#設置檔案的位置
642
				$result["content"]=$conf["csvFilePathAndName"];
643
 
644
				#回傳結果
645
				return $result;
646
 
647
				}#if end
648
 
649
			}#if end
650
 
651
		#要求使用者下載該檔案
652
		#說明:
653
		#要求使用者Download某檔案
654
		#回傳結果:
655
		#$result["status"],字串,"true"爲成功,"false"反之失敗
656
		#$result["error"],陣列,錯誤訊息
657
		#$result["function"],字串,當前執行的函數名稱.
658
		#必填的參數:
659
		$conf["header"]["askUserDownloadFile"]["filePositionAndName"]=$conf["csvFilePathAndName"];#檔案的位置與名稱
660
		#可省略的參數:
661
		$conf["header"]["askUserDownloadFile"]["fileDisplayName"]=basename($conf["csvFilePathAndName"]);#要顯示的檔案名稱,若要放中文請將其文字放在()裏面,這樣種文字才會顯現。預設為 basename($conf["filePositionAndName"]);
662
		#$conf["header"]["askUserDownloadFile"]["mimeType"],字串,檔案的mimeType,預設為"application/octet-stream".
663
		#$conf["header"]["askUserDownloadFile"]["mimeType"]="application/octet-stream";s
664
		#參考資料來源:
665
		#http:#php.net/manual/en/function.readfile.php
666
		$askUserDownloadFile=header::askUserDownloadFile($conf["header"]["askUserDownloadFile"]);
667
		unset($conf["header"]["askUserDownloadFile"]);
668
 
669
		#如果要求下載檔案失敗
670
		if($askUserDownloadFile["status"]=="false"){
671
 
672
			#設置執行正常
673
			$result["status"]="false";
674
 
675
			#設置檔案的位置
676
			$result["content"]=$askUserDownloadFile;
677
 
678
			#回傳結果
679
			return $result;
680
 
681
			}#if end
682
 
683
		#設置執行正常
684
		$result["status"]="true";
685
 
686
		#設置檔案的位置
687
		$result["content"]=$conf["csvFilePathAndName"];
688
 
689
		#回傳結果
690
		return $result;
691
 
692
		}#function create end
693
 
694
	/*
42 liveuser 695
	#函式說明:
1 liveuser 696
	#讀取csv檔案的內容
42 liveuser 697
	#回傳結果:
1 liveuser 698
	#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
699
	#$result["error"],錯誤訊息陣列.
700
	#$result["function"],當前執行的函數名稱.
701
	#$result["csvFileContent"],csv檔案內容的陣列.
702
		#$result["csvFileContent"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
703
		#如果 $conf["firstLineVarName"]爲"true"的話則會回傳 $result["csvFileContent"]["第幾列"]["第一列各個欄位的名稱"]
704
	#$result["lineArray"],csv檔案逐列內容的陣列.
705
	#$result["lineArrayCount"],總共幾列資料.
42 liveuser 706
	#必填參數:
1 liveuser 707
	#$conf["csvFilePositionAndName"],字串,csv檔案的位置
708
	$conf["csvFilePositionAndName"]="";
709
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
710
	$conf["fileArgu"]=__FILE__;
42 liveuser 711
	#可省略參數:
1 liveuser 712
	#$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱),"預設為true".
713
	#$conf["firstLineVarName"]="true";
183 liveuser 714
	#參考資料:
1 liveuser 715
	#http://www.php.net/manual/en/function.str-split.php
716
	#http://chuangmaster.pixnet.net/blog/post/33560606-%5B%E8%BD%89%E8%B2%BC%5D%E9%97%9C%E6%96%BC%E5%9B%9E%E8%BB%8A(%5Cr)%E8%88%87%E6%8F%9B%E8%A1%8C(%5Cn)
717
	#http://php.net/manual/en/function.fgetcsv.php
42 liveuser 718
	#備註:
1 liveuser 719
	#可用fgetcsv函數替代
720
	*/
721
	public static function loadCsvFile(&$conf){
722
 
723
		#初始化要回傳的內容
724
		$result=array();
725
 
726
		#取得當前執行的函數名稱
727
		$result["function"]=__FUNCTION__;
728
 
729
		#如果 $conf 不為陣列
730
		if(gettype($conf)!="array"){
731
 
732
			#設置執行失敗
733
			$result["status"]="false";
734
 
735
			#設置執行錯誤訊息
736
			$result["error"][]="\$conf變數須為陣列形態";
737
 
738
			#如果傳入的參數為 null
739
			if($conf==null){
740
 
741
				#設置執行錯誤訊息
742
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
743
 
744
				}#if end
745
 
746
			#回傳結果
747
			return $result;
748
 
749
			}#if end		
750
 
751
		#檢查參數
752
		#函式說明:
753
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
754
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
755
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
756
		#$result["function"],當前執行的函式名稱.
757
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
758
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
759
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
760
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
761
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
762
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
763
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
764
		#必填寫的參數:
765
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
766
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
767
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
768
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("csvFilePositionAndName","fileArgu");
769
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
770
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
771
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
772
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
773
		#可以省略的參數:
774
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
775
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
776
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
777
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("firstLineVarName");
778
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
779
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
780
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
781
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
782
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
783
		#$conf["arrayCountEqualCheck"][]=array();
784
		#參考資料來源:
785
		#array_keys=>http://php.net/manual/en/function.array-keys.php
786
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
787
		unset($conf["variableCheck::checkArguments"]);
788
 
789
		#如果檢查失敗
790
		if($checkResult["status"]=="false"){
791
 
792
			#設置執行不正常
793
			$result["status"]="false";
794
 
795
			#設置錯誤訊息
796
			$result["error"]=$checkResult;
797
 
798
			#回傳結果
799
			return $result;
800
 
801
			}#if end			
802
 
803
		#如果檢查不通過
804
		if($checkResult["passed"]=="false"){
805
 
806
			#設置執行不正常
807
			$result["status"]="false";
808
 
809
			#設置錯誤訊息
810
			$result["error"]=$checkResult;
811
 
812
			#回傳結果
813
			return $result;
814
 
815
			}#if end	
816
 
817
		#依據行號取得檔案所有內容
818
		#函式說明:
819
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
820
		#回傳的變數說明:
821
		#$result["fileContent"],爲檔案的內容陣列
822
		#$result["lineCount"],爲檔案內容總共的行數
823
		#必填的參數:
824
		$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["csvFilePositionAndName"];#爲檔案的位置以及名稱
825
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
826
		$conf["fileAccess"]["getFileContent"]["fileArgu"]=$conf["fileArgu"];
827
		#參考資料:
828
		#file():取得檔案內容的行數
829
		#http:#php.net/manual/en/function.file.php
830
		$fileContentArray=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
831
		unset($conf["fileAccess"]["getFileContent"]);
832
 
833
		#如果 $fileContentArray["status"] 等於 "false" 則代表檔案內容抓取失敗
834
		if($fileContentArray["status"]=="false"){
835
 
836
			#設定執行錯誤識別
837
			$result["status"]="false";
838
 
839
			#記錄錯誤訊息
840
			$result["error"]=$fileContentArray;
841
 
842
			#回傳檔案內容
843
			return $result;
844
 
845
			}#if end
846
 
847
		#初始化csv檔案逐行內容的陣列
848
		$result["lineArray"]=$fileContentArray["fileContent"];
849
 
850
		#取得內容有幾列
851
		$result["lineArrayCount"]=$fileContentArray["lineCount"];
852
 
853
		#初始化第一行的內容
854
		$firstLineContent=array();
855
 
856
		#有幾行就執行幾次
857
		for($i=0;$i<$result["lineArrayCount"];$i++){
858
 
859
			#將每行的文字一個個字分開
860
			$lineContentArray=str_split($result["lineArray"][$i],1);
861
 
862
			#取得陣列裏面字的長度
863
			$wordCount=count($lineContentArray);
864
 
865
			#初始化開始紀錄欄位內容的識別
866
			#"false"代表目前沒有進行紀錄
867
			#"true"代表目前在進行紀錄
868
			$wordStart="false";
869
 
870
			#初始化用於確保單欄裡面可以多逗號的雙引號「"」
871
			#"false"代表目前在 「"」 外
872
			#"true"代表目前在 「"」內
873
			$testDelimiter="false";
874
 
875
			#初始化欄位內容的陣列
876
			$wordArray=array();
877
 
878
			#暫存形成字的字串
879
			$wordClip="";
880
 
881
			#有幾個字就執行幾次
882
			for($j=0;$j<$wordCount;$j++){
883
 
884
				#如果 
885
				#$wordStart 為 "false"
886
				#$testDelimiter 為 "false" 且
887
				#$lineContentArray[$j] 等於 「"」
888
				if($wordStart=="false" && $testDelimiter=="false" && $lineContentArray[$j]=="\"" ){
889
 
890
					#進入""範圍裡面
891
					$testDelimiter="true";
892
 
893
					#開始讀取欄位內容
894
					$wordStart="true";
895
 
896
					#跳到下一個迴圈
897
					continue;
898
 
899
					}#if end
900
 
901
				#如果 $testDelimiter 為 "true" 且
902
				#$wordStart 為 "true" 且
903
				#$lineContentArray[$j] 等於 「"」
904
				if($wordStart=="true" && $testDelimiter=="true" && $lineContentArray[$j]=="\"" ){
905
 
906
					#echo "<br>離開\"";
907
 
908
					#離開""範圍裡面
909
					$testDelimiter="false";
910
 
911
					#停止讀取欄位內容
912
					$wordStart="false";
913
 
914
					#如果是最後一個字
915
					if($j==$wordCount-1){
916
 
917
						#將取得的片段內容儲存成一個欄位
918
						$wordArray[]=$wordClip;
919
 
920
						#將片段的內容初始化
921
						$wordClip="";
922
 
923
						#跳到下一個迴圈
924
						continue;
925
 
926
						}#if end
927
 
928
					#跳到下一個迴圈
929
					continue;
930
 
931
					}#if end
932
 
933
				#如果
934
				#$wordStart 等於 "true"  或 $testDelimiter 等於 "true"
935
				#或
936
				#$wordStart 等於 "false" 且 $testDelimiter 等於 "false" 且 $lineContentArray[$j] 不等於 ","
937
				if(
938
					($wordStart=="true" || $testDelimiter=="true")
939
					||
940
					($wordStart=="false" && $testDelimiter=="false" && $lineContentArray[$j]!=",")
941
					){
942
 
943
					#暫存形成字的字串
944
					$wordClip=$wordClip.$lineContentArray[$j];
945
 
946
					#echo "<br>讀取".$lineContentArray[$j];
947
					#echo "<br>暫存欄位內容變成".$wordClip;
948
 
949
					#如果是最後一個字
950
					if($j==$wordCount-1){
951
 
952
						#將取得的片段內容儲存成一個欄位
953
						$wordArray[]=$wordClip;
954
 
955
						#將片段的內容初始化
956
						$wordClip="";
957
 
958
						#將欄位開始設為 "false"
959
						$wordStart="false";
960
 
961
						#跳到下一個迴圈
962
						continue;
963
 
964
						}#if end
965
 
966
					#跳到下一個迴圈
967
					continue;
968
 
969
					}#if end
970
 
971
				#如果 $lineContentArray[$j]等於 「,」 且 $testDelimiter 等於 "false"
972
				if($lineContentArray[$j]=="," && $testDelimiter=="false" ){
973
 
974
					#將取得的片段內容儲存成一個欄位
975
					$wordArray[]=$wordClip;
976
 
977
					#echo "<br>遇到逗號,欄位內容讀取完畢";
978
 
979
					#將片段的內容初始化
980
					$wordClip="";
981
 
982
					#將欄位開始設為 "false"
983
					$wordStart="false";
984
 
985
					#跳到下一個迴圈
986
					continue;
987
 
988
					}#if end
989
 
990
				}#for end
991
 
992
			#如果目前讀到的是第一行
993
			if($i==0){
994
 
995
				#取得第一行的內容
996
				$firstLineContent=$wordArray;
997
 
998
				}#if end
999
 
1000
			#如果 $conf["firstLineVarName"] 等於 true
1001
			if($conf["firstLineVarName"]=="true"){
1002
 
1003
				#將 $wordArray 的 key 更改爲第一行的欄位內容
1004
				#函式說明:
1005
				#將陣列的key重新排序,然後回傳,以便後續存取。
1006
				#也可以指定key的內容,但一定要跟元素數量相同。
1007
				#若指定了key的名稱,則 $result["dataContent"] 會變成 $result["dataContent"]["指定的key名稱"]
1008
				#回傳的解果:
1009
				#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
1010
				#$result["error"],執行錯誤的訊息.
1011
				#$result["function"],當前執行的函數名稱.
1012
				#$result["dataContent"],儲存陣列元素的內容.
1013
				#必填的參數:
1014
				$conf["arrays"]["createV2"]["arrayContent"]=$wordArray;#陣列變數
1015
				#可省略的參數:
1016
				$conf["arrays"]["createV2"]["specifiesKeyArray"]=$firstLineContent;#指定key的名稱,須與$conf["arrayContent"]的元素數量相同
1017
				$temp=arrays::createV2($conf["arrays"]["createV2"]);
1018
				unset($conf["arrays"]["createV2"]);
1019
 
1020
				#如果建立陣列失敗
1021
				if($temp["status"]=="false"){
1022
 
1023
					#設置執行錯誤
1024
					$result["status"]="false";
1025
 
1026
					#設置錯誤訊息
1027
					$result["error"]=$temp;
1028
 
1029
					#回傳結果
1030
					return $result;
1031
 
1032
					}#if end
1033
 
1034
				#取得更改後的結果 
1035
				$wordArray=$temp["dataContent"];
1036
 
1037
				}#if end				
1038
 
1039
			#取得該行的各欄位內容
1040
			$result["csvFileContent"][$i]=$wordArray;
1041
 
1042
			}#for end
1043
 
1044
		#執行到這邊代表執行成功
1045
		$result["status"]="true";
1046
 
1047
		#回傳csv檔案的內容
1048
		return $result;
1049
 
1050
		}#function loadCsvFile end
1051
 
1052
	/*
42 liveuser 1053
	#函式說明:
1 liveuser 1054
	#讀取csv檔案的內容
42 liveuser 1055
	#回傳結果:
1 liveuser 1056
	#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
1057
	#$result["error"],錯誤訊息陣列.
1058
	#$result["function"],當前執行的函數名稱
1059
	#$result["content"],csv檔案內容的陣列
1060
		#$result["content"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
1061
		#如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["content"]["第幾列"]["第一列各個欄位的名稱"]
1062
	#$result["title"],欄位的名稱
1063
	#$result["lineCount"],總共幾列資料
42 liveuser 1064
	#必填參數:
1 liveuser 1065
	#$conf["csvFilePositionAndName"],字串,csv檔案的位置
1066
	$conf["csvFilePositionAndName"]="";
1067
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1068
	$conf["fileArgu"]=__FILE__;
42 liveuser 1069
	#可省略參數:
1 liveuser 1070
	#$conf["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱),預設為"true".
183 liveuser 1071
	#參考資料:
1 liveuser 1072
	#http://www.php.net/manual/en/function.str-split.php
1073
	#http://php.net/manual/en/function.fgetcsv.php
42 liveuser 1074
	#備註:
1075
	#無.
1 liveuser 1076
	*/
1077
	public static function read(&$conf){
1078
 
1079
		#初始化要回傳的內容
1080
		$result=array();
1081
 
1082
		#設置當前函數名稱
1083
		$result["function"]=__FUNCTION__;
1084
 
1085
		#如果 $conf 不為陣列
1086
		if(gettype($conf)!="array"){
1087
 
1088
			#設置執行失敗
1089
			$result["status"]="false";
1090
 
1091
			#設置執行錯誤訊息
1092
			$result["error"][]="\$conf變數須為陣列形態";
1093
 
1094
			#如果傳入的參數為 null
1095
			if($conf==null){
1096
 
1097
				#設置執行錯誤訊息
1098
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1099
 
1100
				}#if end
1101
 
1102
			#回傳結果
1103
			return $result;
1104
 
1105
			}#if end		
1106
 
1107
		#檢查參數
1108
		#檢查參數
1109
		#函式說明:
1110
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1111
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1112
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1113
		#$result["function"],當前執行的函式名稱.
1114
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1115
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1116
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1117
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1118
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1119
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1120
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1121
		#必填寫的參數:
1122
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1123
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1124
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1125
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("csvFilePositionAndName","fileArgu");
1126
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1127
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
1128
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1129
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1130
		#可以省略的參數:
1131
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1132
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1133
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1134
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("firstLineVarName");
1135
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1136
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1137
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1138
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
1139
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1140
		#$conf["arrayCountEqualCheck"][]=array();
1141
		#參考資料來源:
1142
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1143
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1144
		unset($conf["variableCheck::checkArguments"]);
1145
 
1146
		#如果檢查失敗
1147
		if($checkResult["status"]=="false"){
1148
 
1149
			#設置執行不正常
1150
			$result["status"]="false";
1151
 
1152
			#設置錯誤訊息
1153
			$result["error"]=$checkResult;
1154
 
1155
			#回傳結果
1156
			return $result;
1157
 
1158
			}#if end			
1159
 
1160
		#如果檢查不通過
1161
		if($checkResult["passed"]=="false"){
1162
 
1163
			#設置執行不正常
1164
			$result["status"]="false";
1165
 
1166
			#設置錯誤訊息
1167
			$result["error"]=$checkResult;
1168
 
1169
			#回傳結果
1170
			return $result;
1171
 
1172
			}#if end	
1173
 
1174
		#初始化用來儲存csv內容的變數
1175
		$csvFileContent=array();
1176
 
1177
		#如果開啓 $conf["csvFilePositionAndName"] 成功
1178
		if(($handle=fopen($conf["csvFilePositionAndName"],"r"))!==FALSE){
1179
 
1180
			#如果檔案還有內容
1181
			while(($data=fgetcsv($handle))!==FALSE){
1182
 
1183
				#儲存該行內容
1184
				$csvFileContent[]=$data;
1185
 
1186
				}#while end
1187
 
1188
			}#if end
1189
 
1190
		#反之
1191
		else{
1192
 
1193
			#設置錯誤識別
1194
			$result["status"]="false";
1195
 
1196
			#設置錯訊息
1197
			$resukt["error"][]="檔案".$conf["csvFilePositionAndName"]."開啓失敗!";
1198
 
1199
			#回傳結果
1200
			return $result;
1201
 
1202
			}#else end
1203
 
1204
		#初始化欄位標題陣列
1205
		$title=array();	
1206
 
1207
		#如果 $conf["firstLineVarName"] 爲 "true"
1208
		if($conf["firstLineVarName"]=="true"){
1209
 
1210
			#迴圈,執行欄位數次數
1211
			for($i=0;$i<count($csvFileContent[0]);$i++){
1212
 
1213
				#取得欄位名稱
1214
				$title[]=$csvFileContent[0][$i];
1215
 
1216
				}#for end
1217
 
1218
			#取得欄位名稱
1219
			$result["title"]=$title;
1220
 
1221
			#用欄位名稱作爲key來儲存每列內容
1222
			#迴圈,執行列數次數
1223
			for($i=1;$i<count($csvFileContent);$i++){
1224
 
1225
				#迴圈,執行欄位數目次
1226
				for($j=0;$j<count($csvFileContent[0]);$j++){
1227
 
1228
					#用數字作爲key來儲存內容
1229
					$result["content"][$j][$i-1]=$csvFileContent[$i][$j];
1230
 
1231
					#用欄位名稱作爲key來儲存內容
1232
					$result["content"][$title[$j]][$i-1]=$csvFileContent[$i][$j];
1233
 
1234
					}#for end
1235
 
1236
				}#for end
1237
 
1238
			}#if end
1239
 
1240
		#反之直接儲存 fgetcsv 取得的內容
1241
		else{
1242
 
1243
			#取得csv檔案內容
1244
			$result["content"]=$csvFileContent;
1245
 
1246
			}#else end
1247
 
1248
		#取得資料筆數
1249
		$result["lineCount"]=count($result["content"])/2;
1250
 
1251
		#設置執行正常
1252
		$result["status"]="true";
1253
 
1254
		#回傳結果
1255
		return $result;
1256
 
1257
		}#funciton read end
1258
 
1259
	/*
1260
	#函式說明:
1261
	#計屬csv檔裡面的關鍵字,亦即內容剛好等於關鍵字的次數.
1262
	#回傳的結果:
1263
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
1264
	#$result["error"],錯誤訊息陣列.
1265
	#$result["content"],找到的關鍵字數量.
1266
	#$result["function"],當前執行的函數名稱.
42 liveuser 1267
	#必填參數:
1 liveuser 1268
	#$conf["csvFileAddress"],字串,csv檔案的位置與名稱.
1269
	$conf["csvFileAddress"]="";
1270
	#$conf["keyWord"],字串,要尋找的關鍵字.
1271
	$conf["keyWord"]="";
1272
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1273
	$conf["fileArgu"]=__FILE__;
42 liveuser 1274
	#可省略參數: 
1275
	#$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱),"true"表示第一列不在搜尋範圍裡,預設為"true".
1276
	#$conf["firstLineVarName"]="true";
183 liveuser 1277
	#參考資料:
1278
	#無.
42 liveuser 1279
	#備註:
1280
	#無.
1 liveuser 1281
	*/
1282
	public static function keyWordsCount(&$conf){
1283
 
1284
		#初始化要回傳的變數
1285
		$reuslt=array();
1286
 
1287
		#取得當前執行的函數名稱
1288
		$result["function"]=__FUNCTION__;
1289
 
1290
		#如果 $conf 不為陣列
1291
		if(gettype($conf)!="array"){
1292
 
1293
			#設置執行失敗
1294
			$result["status"]="false";
1295
 
1296
			#設置執行錯誤訊息
1297
			$result["error"][]="\$conf變數須為陣列形態";
1298
 
1299
			#如果傳入的參數為 null
1300
			if($conf==null){
1301
 
1302
				#設置執行錯誤訊息
1303
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1304
 
1305
				}#if end
1306
 
1307
			#回傳結果
1308
			return $result;
1309
 
1310
			}#if end
1311
 
1312
		#初始化計數關鍵字的變數
1313
		$result["content"]=0;
1314
 
1315
		#檢查參數
1316
		#函式說明:
1317
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1318
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1319
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1320
		#$result["function"],當前執行的函式名稱.
1321
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1322
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1323
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1324
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1325
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1326
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1327
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1328
		#必填寫的參數:
1329
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1330
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1331
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1332
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("csvFileAddress","keyWord","fileArgu");
1333
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1334
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
1335
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1336
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1337
		#可以省略的參數:
1338
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1339
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1340
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1341
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("firstLineVarName");
1342
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1343
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1344
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1345
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
1346
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1347
		#$conf["arrayCountEqualCheck"][]=array();
1348
		#參考資料來源:
1349
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1350
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1351
		unset($conf["variableCheck::checkArguments"]);
1352
 
1353
		#如果檢查失敗
1354
		if($checkResult["status"]=="false"){
1355
 
1356
			#設置執行不正常
1357
			$result["status"]="false";
1358
 
1359
			#設置錯誤訊息
1360
			$result["error"]=$checkResult;
1361
 
1362
			#回傳結果
1363
			return $result;
1364
 
1365
			}#if end			
1366
 
1367
		#如果檢查不通過
1368
		if($checkResult["passed"]=="false"){
1369
 
1370
			#設置執行不正常
1371
			$result["status"]="false";
1372
 
1373
			#設置錯誤訊息
1374
			$result["error"]=$checkResult;
1375
 
1376
			#回傳結果
1377
			return $result;
1378
 
1379
			}#if end
1380
 
1381
		#讀座位表csv檔
1382
		#涵式說明:
1383
		#讀取csv檔案的內容
1384
		#回傳得結果:
1385
		#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
1386
		#$result["error"],錯誤訊息陣列.
1387
		#$result["function"],當前執行的函數名稱.
1388
		#$result["csvFileContent"],csv檔案內容的陣列.
1389
			#$result["csvFileContent"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
1390
			#如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["csvFileContent"]["第幾列"]["第一列各個欄位的名稱"]
1391
		#$result["lineArray"],csv檔案逐列內容的陣列.
1392
		#$result["lineArrayCount"],總共幾列資料.
1393
		#必填的參數:
1394
		$conf["csv"]["loadCsvFile"]["csvFilePositionAndName"]=$conf["csvFileAddress"];#csv檔案的位置
1395
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1396
		$conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];
1397
		#可省略的參數:
1398
		$conf["csv"]["loadCsvFile"]["firstLineVarName"]=$conf["firstLineVarName"];#第一行是否爲變數名稱(各個欄位的名稱)
1399
		#參考資料來源:
1400
		#http://www.php.net/manual/en/function.str-split.php
1401
		#參考資料來源
1402
		#http://chuangmaster.pixnet.net/blog/post/33560606-%5B%E8%BD%89%E8%B2%BC%5D%E9%97%9C%E6%96%BC%E5%9B%9E%E8%BB%8A(%5Cr)%E8%88%87%E6%8F%9B%E8%A1%8C(%5Cn)
1403
		$seatMap=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);
1404
		unset($conf["csv"]["loadCsvFile"]);
1405
 
1406
		#如果 $seatMap["status"] 等於 "false"
1407
		if($seatMap["status"]=="false"){
1408
 
1409
			#設置執行錯誤
1410
			$result["status"]="true";
1411
 
1412
			#設置錯誤訊息
1413
			$result["error"]=$seatMap;
1414
 
1415
			#回傳結果
1416
			return $result;
1417
 
1418
			}#if end
1419
 
1420
		#根據csv檔裡每列內容
1421
		foreach($seatMap["csvFileContent"] as $row){
1422
 
1423
			#根據每列的欄元素
1424
			foreach($row as $col){					
1425
 
1426
				#如果欄位內容等於關鍵字
1427
				if($col==$conf["keyWord"]){
1428
 
1429
					#$result["content"]加1
1430
					$result["content"]++;
1431
 
1432
					}#if end
1433
 
1434
				}#foreach end
1435
 
1436
			}#foreach end
1437
 
1438
		#執行到這邊代表執行正常
1439
		$result["status"]="true";
1440
 
1441
		#回傳結果
1442
		return $result;
1443
 
1444
		}#function keyWordCount end
1445
 
1446
	/*
42 liveuser 1447
	#函式說明:
1 liveuser 1448
	#將透過db::fastGetDbData取得的資料表資料轉換成用csv::create建立csv檔所需的格式	,亦即轉換成一個二維陣列記錄每筆資料每個欄位填寫的內容.
1449
	#回傳結果:
1450
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1451
	#$result["error"],錯誤訊息陣列.
1452
	#$result["function"],當前執行的函數名稱.
1453
	#$result["content"],轉換好要給csv::create建立csv檔所需的格式變數.
1454
	#必填參數:
1455
	#$conf["db::fastGetDbData"],陣列,透過db::fastGetDbData取得的回傳結果.
1456
	$conf["db::fastGetDbData"]=$;
42 liveuser 1457
	#可省略參數:
1 liveuser 1458
	#$conf["columnTitleName"],字串陣列,每個欄位的名稱,預設為資料表欄位的名稱.
1459
	#$conf["columnTitleName"]=array();
183 liveuser 1460
	#參考資料:
1461
	#無.
42 liveuser 1462
	#備註:
1463
	#無.
1 liveuser 1464
	*/
1465
	public static function dataTable2csvFormat(&$conf){
1466
 
1467
		#初始化要回傳的變數
1468
		$reuslt=array();
1469
 
1470
		#取得當前執行的函數名稱
1471
		$result["function"]=__FUNCTION__;
1472
 
1473
		#初始化要回傳的csv格式變數	
1474
		$result["content"]=array();	
1475
 
1476
		#如果 $conf 不為陣列
1477
		if(gettype($conf)!="array"){
1478
 
1479
			#設置執行失敗
1480
			$result["status"]="false";
1481
 
1482
			#設置執行錯誤訊息
1483
			$result["error"][]="\$conf變數須為陣列形態";
1484
 
1485
			#如果傳入的參數為 null
1486
			if($conf==null){
1487
 
1488
				#設置執行錯誤訊息
1489
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1490
 
1491
				}#if end
1492
 
1493
			#回傳結果
1494
			return $result;
1495
 
1496
			}#if end
1497
 
1498
		#檢查參數
1499
		#函式說明:
1500
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1501
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1502
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1503
		#$result["function"],當前執行的函式名稱.
1504
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1505
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1506
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1507
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1508
		#必填寫的參數:
1509
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1510
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1511
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1512
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("db::fastGetDbData");
1513
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1514
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
1515
		#可以省略的參數:
1516
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1517
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1518
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1519
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("columnTitleName");
1520
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1521
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
1522
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1523
		#$conf["skipableVarDefaultValue"]=array("");
1524
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1525
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1526
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1527
		#$conf["arrayCountEqualCheck"][]=array();
1528
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1529
		unset($conf["variableCheck::checkArguments"]);
1530
 
1531
		#如果檢查失敗
1532
		if($checkResult["status"]=="false"){
1533
 
1534
			#設置執行錯誤
1535
			$result["status"]="false";
1536
 
1537
			#設置錯誤訊息
1538
			$result["error"]=$checkResult;
1539
 
1540
			#回傳結果
1541
			return $result;
1542
 
1543
			}#if end
1544
 
1545
		#如果檢查不通過
1546
		if($checkResult["passed"]=="false"){
1547
 
1548
			#設置執行錯誤
1549
			$result["status"]="false";
1550
 
1551
			#設置錯誤訊息
1552
			$result["error"]=$checkResult;
1553
 
1554
			#回傳結果
1555
			return $result;
1556
 
1557
			}#if end
1558
 
1559
		#如果 $conf["db::fastGetDbData"] 的執行結果不為正常的
1560
		if($conf["db::fastGetDbData"]["status"]=="false"){
1561
 
1562
			#echo "123";
1563
 
1564
			#設置執行錯誤
1565
			$result["status"]="false";
1566
 
1567
			#設置錯誤訊息
1568
			$result["error"]=$conf["db::fastGetDbData"];
1569
 
1570
			#回傳結果
1571
			return $result;
1572
 
1573
			}#if end
1574
 
1575
		#如果 $conf["db::fastGetDbData"] 的資料筆數為 0
1576
		if($conf["db::fastGetDbData"]["dataCount"]==0){
1577
 
1578
			#echo "123";
1579
 
1580
			#設置執行錯誤
1581
			$result["status"]="false";
1582
 
1583
			#設置錯誤訊息
1584
			$result["error"]=$conf["db::fastGetDbData"];
1585
 
1586
			#回傳結果
1587
			return $result;
1588
 
1589
			}#if end
1590
 
1591
		#如果沒有設置 $conf["columnTitleName"]
1592
		if(!isset($conf["columnTitleName"])){
1593
 
1594
			#預設為資料表的欄位名稱
1595
			$conf["columnTitleName"]=$conf["db::fastGetDbData"]["dataColumnName"];
1596
 
1597
			}#if end
1598
 
1599
		#反之有設置 $conf["columnName"]
1600
		else{
1601
 
1602
			#如果 $conf["columnName"] 的數量與 $conf["db::fastGetDbData"]["dataColumnName"] 不一樣
1603
			if(count($conf["columnTitleName"])!=count($conf["db::fastGetDbData"]["dataColumnName"])){
1604
 
1605
				#設置執行錯誤
1606
				$result["status"]="false";
1607
 
1608
				#設置錯誤訊息
1609
				$result["error"][]="參數\$conf[\"columnName\"]與\$conf[\"db::fastGetDbData\"][\"dataColumnName\"]的元素數量要一樣";
1610
 
1611
				#回傳結果
1612
				return $result;
1613
 
1614
				}#if end
1615
 
1616
			}#else end
1617
 
1618
		#建立標題欄的內容	
1619
		$result["content"][]=$conf["columnTitleName"];
1620
 
1621
		#有幾筆資料就執行幾次迴圈
1622
		for($i=0;$i<$conf["db::fastGetDbData"]["dataCount"];$i++){
1623
 
1624
			#初始化暫存的陣列
1625
			$temp["oneData"]=array();
1626
 
1627
			#有幾個欄位就執行幾次迴圈
1628
			for($j=0;$j<count($conf["columnTitleName"]);$j++){
1629
 
1630
				#記錄第$i+1筆資料的第$j+1欄位的內容
1631
				$temp["oneData"][]=$conf["db::fastGetDbData"]["dataContent"][$conf["db::fastGetDbData"]["dataColumnName"][$j]][$i];
1632
 
1633
				}#for end
1634
 
1635
			#記錄第$i+1筆資料的內容
1636
			$result["content"][]=$temp["oneData"];
1637
 
1638
			}#for end
1639
 
1640
		#執行到這邊代表執行正常
1641
		$result["status"]="true";
1642
 
1643
		#回傳結果
1644
		return $result;
1645
 
1646
		}#function dataTable2csvFormat end
1647
 
1648
	}#class csv end
1649
 
1650
?>