Subversion Repositories php-qbpwcf

Rev

Rev 3 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3 Rev 226
Line 1... Line 1...
1
<?php
1
<?php
2
 
2
 
3
/*
3
/*
4
 
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2015~2024 Min-Jhin,Chen
6
    Copyright (C) 2014~2025 MIN ZHI, CHEN
7
 
7
 
8
    This file is part of QBPWCF.
8
    This file is part of QBPWCF.
9
 
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
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
11
    it under the terms of the GNU General Public License as published by
Line 45... Line 45...
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	#備註:
46
	#備註:
47
	#無
47
	#無
48
	*/
48
	*/
49
	public function __call($method,$arguments){
49
	public function __call($method,$arguments){
50
		
50
 
51
		#取得當前執行的函式
51
		#取得當前執行的函式
52
		$result["function"]=__FUNCTION__;
52
		$result["function"]=__FUNCTION__;
53
		
53
 
54
		#設置執行不正常
54
		#設置執行不正常
55
		$result["status"]="false";
55
		$result["status"]="false";
56
		
56
 
57
		#設置執行錯誤
57
		#設置執行錯誤
58
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
58
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
59
		
59
 
60
		#設置所丟入的參數
60
		#設置所丟入的參數
61
		$result["error"][]=$arguments;
61
		$result["error"][]=$arguments;
62
		
62
 
63
		#回傳結果
63
		#回傳結果
64
		return $result;
64
		return $result;
65
		
65
 
66
		}#function __call end
66
		}#function __call end
67
		
67
 
68
	/*
68
	/*
69
	#函式說明:
69
	#函式說明:
70
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
70
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
71
	#回傳結果:
71
	#回傳結果:
72
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
72
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 79... Line 79...
79
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
79
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
80
	#備註:
80
	#備註:
81
	#無
81
	#無
82
	*/
82
	*/
83
	public static function __callStatic($method,$arguments){
83
	public static function __callStatic($method,$arguments){
84
		
84
 
85
		#取得當前執行的函式
85
		#取得當前執行的函式
86
		$result["function"]=__FUNCTION__;
86
		$result["function"]=__FUNCTION__;
87
		
87
 
88
		#設置執行不正常
88
		#設置執行不正常
89
		$result["status"]="false";
89
		$result["status"]="false";
90
		
90
 
91
		#設置執行錯誤
91
		#設置執行錯誤
92
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
92
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
93
		
93
 
94
		#設置所丟入的參數
94
		#設置所丟入的參數
95
		$result["error"][]=$arguments;
95
		$result["error"][]=$arguments;
96
		
96
 
97
		#回傳結果
97
		#回傳結果
98
		return $result;
98
		return $result;
99
		
99
 
100
		}#function __callStatic end
100
		}#function __callStatic end
101
 
101
 
102
	/*
102
	/*
103
	#函式說明:
103
	#函式說明:
104
	#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
104
	#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
Line 119... Line 119...
119
	#$conf["disbaleOptimal"]="true";
119
	#$conf["disbaleOptimal"]="true";
120
	#參考資料:
120
	#參考資料:
121
	#無.
121
	#無.
122
	#備註:
122
	#備註:
123
	#無.
123
	#無.
124
	*/ 
124
	*/
125
	public static function executeR(&$conf){
125
	public static function executeR(&$conf){
126
		
126
 
127
		#初始化要回傳的結果
127
		#初始化要回傳的結果
128
		$result=array();
128
		$result=array();
129
		
129
 
130
		#設置當前函數名稱
130
		#設置當前函數名稱
131
		$result["function"]=__FUNCTION__;
131
		$result["function"]=__FUNCTION__;
132
		
132
 
133
		#如果 $conf 不等於 "array"
133
		#如果 $conf 不等於 "array"
134
		if(gettype($conf)!="array"){				
134
		if(gettype($conf)!="array"){
135
			
135
 
136
			#設定錯誤識別
136
			#設定錯誤識別
137
			$result["status"]="false";
137
			$result["status"]="false";
138
			
138
 
139
			#設置錯誤訊息
139
			#設置錯誤訊息
140
			$result["error"]="參數的Key指定有誤!";
140
			$result["error"]="參數的Key指定有誤!";
141
			
141
 
142
			#如果傳入的參數為 null
142
			#如果傳入的參數為 null
143
			if($conf==null){
143
			if($conf==null){
144
				
144
 
145
				#設置執行錯誤訊息
145
				#設置執行錯誤訊息
146
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
146
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
147
				
147
 
148
				}#if end
148
				}#if end
149
			
149
 
150
			#回傳結果
150
			#回傳結果
151
			return $result;
151
			return $result;
152
			
152
 
153
			}#if end
153
			}#if end
154
		
154
 
155
		#如果 $conf["disbaleOptimal"] 未設定
155
		#如果 $conf["disbaleOptimal"] 未設定
156
		if(!isset($conf["disbaleOptimal"])){
156
		if(!isset($conf["disbaleOptimal"])){
157
			
157
 
158
			#預設 $conf["disbaleOptimal"] 為 "false"
158
			#預設 $conf["disbaleOptimal"] 為 "false"
159
			$conf["disbaleOptimal"]="false";
159
			$conf["disbaleOptimal"]="false";
160
			
160
 
161
			}#if end
161
			}#if end
162
		
162
 
163
		#檢查參數
163
		#檢查參數
164
		#涵式說明:
164
		#涵式說明:
165
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
165
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
166
		#回傳的結果:
166
		#回傳的結果:
167
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
167
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 170... Line 170...
170
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
170
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
171
		#必填寫的參數:
171
		#必填寫的參數:
172
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
172
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
173
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("rPositionAndName","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
173
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("rPositionAndName","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
174
		#可以省略的參數:
174
		#可以省略的參數:
175
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
175
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
176
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
176
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
177
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
177
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
178
		unset($conf["variableCheck"]["isexistMuti"]);
178
		unset($conf["variableCheck"]["isexistMuti"]);
179
		
179
 
180
		#如果 $checkResult["status"] 等於 "false"
180
		#如果 $checkResult["status"] 等於 "false"
181
		if($checkResult["status"]=="false"){
181
		if($checkResult["status"]=="false"){
182
			
182
 
183
			#設置錯誤識別
183
			#設置錯誤識別
184
			$result["status"]="false";
184
			$result["status"]="false";
185
			
185
 
186
			#設置錯誤訊息
186
			#設置錯誤訊息
187
			$result["error"]=$checkResult;
187
			$result["error"]=$checkResult;
188
			
188
 
189
			#回傳結果
189
			#回傳結果
190
			return $result;
190
			return $result;
191
			
191
 
192
			}#if end
192
			}#if end
193
			
193
 
194
		#如果 $checkResult["passed"] 等於 "false"
194
		#如果 $checkResult["passed"] 等於 "false"
195
		if($checkResult["passed"]=="false"){
195
		if($checkResult["passed"]=="false"){
196
			
196
 
197
			#設置錯誤識別
197
			#設置錯誤識別
198
			$result["status"]="false";
198
			$result["status"]="false";
199
			
199
 
200
			#設置錯誤訊息
200
			#設置錯誤訊息
201
			$result["error"]=$checkResult;
201
			$result["error"]=$checkResult;
202
			
202
 
203
			#回傳結果
203
			#回傳結果
204
			return $result;
204
			return $result;
205
			
205
 
206
			}#if end
206
			}#if end
207
		
207
 
208
		#產生暫時存放執行結果的檔案
208
		#產生暫時存放執行結果的檔案
209
		#函式說明:
209
		#函式說明:
210
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
210
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
211
		#回傳的結果:
211
		#回傳的結果:
212
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
212
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
Line 219... Line 219...
219
		$conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=".R/tempOutPut";
219
		$conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=".R/tempOutPut";
220
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
220
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
221
		$conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
221
		$conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
222
		$createTempFileOfOutput=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
222
		$createTempFileOfOutput=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
223
		unset($conf["fileAccess"]["createFileAfterCheck"]);
223
		unset($conf["fileAccess"]["createFileAfterCheck"]);
224
		
224
 
225
		#如果 $createTempFileOfOutput["status"] 等於 "false"
225
		#如果 $createTempFileOfOutput["status"] 等於 "false"
226
		if($createTempFileOfOutput["status"]=="false"){
226
		if($createTempFileOfOutput["status"]=="false"){
227
			
227
 
228
			#設置錯誤識別
228
			#設置錯誤識別
229
			$result["status"]="false";
229
			$result["status"]="false";
230
			
230
 
231
			#設置錯誤訊息
231
			#設置錯誤訊息
232
			$result["error"]=$createTempFileOfOutput;
232
			$result["error"]=$createTempFileOfOutput;
233
			
233
 
234
			#回傳結果
234
			#回傳結果
235
			return $result;
235
			return $result;
236
			
236
 
237
			}#if end
237
			}#if end
238
			
238
 
239
		#取得R腳本內容
239
		#取得R腳本內容
240
		#函式說明:
240
		#函式說明:
241
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
241
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
242
		#回傳的變數說明:
242
		#回傳的變數說明:
243
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
243
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
Line 253... Line 253...
253
		#file():取得檔案內容的行數
253
		#file():取得檔案內容的行數
254
		#http:#php.net/manual/en/function.file.php
254
		#http:#php.net/manual/en/function.file.php
255
		#rtrim():剔除透過file()取得每行內容結尾的換行符號.
255
		#rtrim():剔除透過file()取得每行內容結尾的換行符號.
256
		$getRscriptContent=fileAccess::getFileContent($conf["file.getFileContent"]);
256
		$getRscriptContent=fileAccess::getFileContent($conf["file.getFileContent"]);
257
		unset($conf["file.getFileContent"]);
257
		unset($conf["file.getFileContent"]);
258
			
258
 
259
		#如果取得R腳本內容失敗
259
		#如果取得R腳本內容失敗
260
		if($getRscriptContent["status"]=="false"){
260
		if($getRscriptContent["status"]=="false"){
261
			
261
 
262
			#設置錯誤識別
262
			#設置錯誤識別
263
			$result["status"]="false";
263
			$result["status"]="false";
264
			
264
 
265
			#設置錯誤訊息
265
			#設置錯誤訊息
266
			$result["error"]=$getRscriptContent;
266
			$result["error"]=$getRscriptContent;
267
			
267
 
268
			#回傳結果
268
			#回傳結果
269
			return $result;
269
			return $result;
270
			
270
 
271
			}#if end
271
			}#if end
272
			
272
 
273
		#取得R腳本內容
273
		#取得R腳本內容
274
		$result["RscriptContent"]=$getRscriptContent["fileContent"];
274
		$result["RscriptContent"]=$getRscriptContent["fileContent"];
275
			
275
 
276
		#初始化要執行的R指令參數
276
		#初始化要執行的R指令參數
277
		$paramsArray=array();
277
		$paramsArray=array();
278
			
278
 
279
		#如果要優化R的執行
279
		#如果要優化R的執行
280
		if($conf["disbaleOptimal"]=="false"){
280
		if($conf["disbaleOptimal"]=="false"){
281
			
281
 
282
			#設定要執行的R指令參數
282
			#設定要執行的R指令參數
283
			$paramsArray=array("--vanilla","-q","-f",$conf["rPositionAndName"],">",$createTempFileOfOutput["createdFilePathAndName"]);
283
			$paramsArray=array("--vanilla","-q","-f",$conf["rPositionAndName"],">",$createTempFileOfOutput["createdFilePathAndName"]);
284
			
284
 
285
			}#if end
285
			}#if end
286
			
286
 
287
		#反之代表不優化R的執行
287
		#反之代表不優化R的執行
288
		else{
288
		else{
289
			
289
 
290
			#設定要執行的R指令參數
290
			#設定要執行的R指令參數
291
			$paramsArray=array("-f",$conf["rPositionAndName"],">",$createTempFileOfOutput["createdFilePathAndName"]);
291
			$paramsArray=array("-f",$conf["rPositionAndName"],">",$createTempFileOfOutput["createdFilePathAndName"]);
292
			
292
 
293
			}#else end
293
			}#else end
294
		
294
 
295
		#函式說明:
295
		#函式說明:
296
		#呼叫shell執行系統命令,並取得回傳的內容.
296
		#呼叫shell執行系統命令,並取得回傳的內容.
297
		#回傳結果:
297
		#回傳結果:
298
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
298
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
299
		#$result["error"],錯誤訊息陣列.
299
		#$result["error"],錯誤訊息陣列.
Line 349... Line 349...
349
		#備註:
349
		#備註:
350
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
350
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
351
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
351
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
352
		$executionResult=external::callShell($conf["external"]["callShell"]);
352
		$executionResult=external::callShell($conf["external"]["callShell"]);
353
		unset($conf["external"]["callShell"]);
353
		unset($conf["external"]["callShell"]);
354
		
354
 
355
		#如果 $executionResult["status"] 等於 "false"
355
		#如果 $executionResult["status"] 等於 "false"
356
		if($executionResult["status"]=="false"){
356
		if($executionResult["status"]=="false"){
357
			
357
 
358
			#設置錯誤識別
358
			#設置錯誤識別
359
			$result["status"]="false";
359
			$result["status"]="false";
360
			
360
 
361
			#設置錯誤訊息
361
			#設置錯誤訊息
362
			$result["error"]=$executionResult;
362
			$result["error"]=$executionResult;
363
			
363
 
364
			#回傳結果
364
			#回傳結果
365
			return $result;
365
			return $result;
366
			
366
 
367
			}#if end
367
			}#if end
368
			
368
 
369
		#取得暫存檔裡面的R輸出結果
369
		#取得暫存檔裡面的R輸出結果
370
		#函式說明:
370
		#函式說明:
371
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
371
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
372
		#回傳的變數說明:
372
		#回傳的變數說明:
373
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
373
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
Line 383... Line 383...
383
		#file():取得檔案內容的行數
383
		#file():取得檔案內容的行數
384
		#http:#php.net/manual/en/function.file.php
384
		#http:#php.net/manual/en/function.file.php
385
		#rtrim():剔除透過file()取得每行內容結尾的換行符號.
385
		#rtrim():剔除透過file()取得每行內容結尾的換行符號.
386
		$readRtempOutPutFile=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
386
		$readRtempOutPutFile=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
387
		unset($conf["fileAccess"]["getFileContent"]);
387
		unset($conf["fileAccess"]["getFileContent"]);
388
		
388
 
389
		#如果 $readRtempOutPutFile["status"] 等於 "false"
389
		#如果 $readRtempOutPutFile["status"] 等於 "false"
390
		if($readRtempOutPutFile["status"]=="false"){
390
		if($readRtempOutPutFile["status"]=="false"){
391
			
391
 
392
			#設置錯誤識別
392
			#設置錯誤識別
393
			$result["status"]="false";
393
			$result["status"]="false";
394
			
394
 
395
			#設置錯誤訊息
395
			#設置錯誤訊息
396
			$result["error"]=$readRtempOutPutFile;
396
			$result["error"]=$readRtempOutPutFile;
397
			
397
 
398
			#回傳結果
398
			#回傳結果
399
			return $result;
399
			return $result;
400
			
400
 
401
			}#if end
401
			}#if end
402
			
402
 
403
		#取得輸出內容行數
403
		#取得輸出內容行數
404
		$result["lineCount"]=$readRtempOutPutFile["lineCount"];
404
		$result["lineCount"]=$readRtempOutPutFile["lineCount"];
405
		
405
 
406
		#取得輸出內容陣列
406
		#取得輸出內容陣列
407
		$result["lineArray"]=$readRtempOutPutFile["fileContent"];
407
		$result["lineArray"]=$readRtempOutPutFile["fileContent"];
408
		
408
 
409
		#移除R腳本檔案
409
		#移除R腳本檔案
410
		#涵式說明:
410
		#涵式說明:
411
		#移除檔案
411
		#移除檔案
412
		#回傳的結果:
412
		#回傳的結果:
413
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
413
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
Line 415... Line 415...
415
		$conf["fileAccess"]["delFile"]["fileAddress"]=$conf["rPositionAndName"];#要移除檔案的位置
415
		$conf["fileAccess"]["delFile"]["fileAddress"]=$conf["rPositionAndName"];#要移除檔案的位置
416
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
416
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
417
		$conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
417
		$conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
418
		$eraseRsh=fileAccess::delFile($conf["fileAccess"]["delFile"]);
418
		$eraseRsh=fileAccess::delFile($conf["fileAccess"]["delFile"]);
419
		unset($conf["fileAccess"]["delFile"]);
419
		unset($conf["fileAccess"]["delFile"]);
420
			
420
 
421
		#如果 $eraseRsh["status"] 等於 "false"
421
		#如果 $eraseRsh["status"] 等於 "false"
422
		if($eraseRsh["status"]=="false"){
422
		if($eraseRsh["status"]=="false"){
423
			
423
 
424
			#設置錯誤識別
424
			#設置錯誤識別
425
			$result["status"]="false";
425
			$result["status"]="false";
426
			
426
 
427
			#設置錯誤訊息
427
			#設置錯誤訊息
428
			$result["error"]=$eraseRsh;
428
			$result["error"]=$eraseRsh;
429
			
429
 
430
			#回傳結果
430
			#回傳結果
431
			return $result;
431
			return $result;
432
			
432
 
433
			}#if end
433
			}#if end
434
			
434
 
435
		#移除暫存R輸出的檔案
435
		#移除暫存R輸出的檔案
436
		#涵式說明:
436
		#涵式說明:
437
		#移除檔案
437
		#移除檔案
438
		#回傳的結果:
438
		#回傳的結果:
439
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
439
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
Line 441... Line 441...
441
		$conf["fileAccess"]["delFile"]["fileAddress"]=$createTempFileOfOutput["createdFilePathAndName"];#要移除檔案的位置
441
		$conf["fileAccess"]["delFile"]["fileAddress"]=$createTempFileOfOutput["createdFilePathAndName"];#要移除檔案的位置
442
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
442
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
443
		$conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
443
		$conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
444
		$eraseRtempOutputFile=fileAccess::delFile($conf["fileAccess"]["delFile"]);
444
		$eraseRtempOutputFile=fileAccess::delFile($conf["fileAccess"]["delFile"]);
445
		unset($conf["fileAccess"]["delFile"]);
445
		unset($conf["fileAccess"]["delFile"]);
446
			
446
 
447
		#如果 $eraseRsh["status"] 等於 "false"
447
		#如果 $eraseRsh["status"] 等於 "false"
448
		if($eraseRtempOutputFile["status"]=="false"){
448
		if($eraseRtempOutputFile["status"]=="false"){
449
			
449
 
450
			#設置錯誤識別
450
			#設置錯誤識別
451
			$result["status"]="false";
451
			$result["status"]="false";
452
			
452
 
453
			#設置錯誤訊息
453
			#設置錯誤訊息
454
			$result["error"]=$eraseRsh;
454
			$result["error"]=$eraseRsh;
455
			
455
 
456
			#回傳結果
456
			#回傳結果
457
			return $result;
457
			return $result;
458
			
458
 
459
			}#if end
459
			}#if end
460
		
460
 
461
		#執行到這邊代表執行正常
461
		#執行到這邊代表執行正常
462
		$result["status"]="true";
462
		$result["status"]="true";
463
		
463
 
464
		#回傳結果
464
		#回傳結果
465
		return $result;
465
		return $result;
466
		
466
 
467
		}#function executeR end
467
		}#function executeR end
468
 
468
 
469
	/*
469
	/*
470
	#涵式說明:
470
	#涵式說明:
471
	#展示R的文字輸出範例
471
	#展示R的文字輸出範例
Line 493... Line 493...
493
		#取得當前執行的函數名稱
493
		#取得當前執行的函數名稱
494
		$result["function"]=__FUNCTION__;
494
		$result["function"]=__FUNCTION__;
495
 
495
 
496
		#如果沒有參數
496
		#如果沒有參數
497
		if(func_num_args()==0){
497
		if(func_num_args()==0){
498
			
498
 
499
			#設置執行失敗
499
			#設置執行失敗
500
			$result["status"]="false";
500
			$result["status"]="false";
501
			
501
 
502
			#設置執行錯誤訊息
502
			#設置執行錯誤訊息
503
			$result["error"]="函數".$result["function"]."需要參數";
503
			$result["error"]="函數".$result["function"]."需要參數";
504
			
504
 
505
			#回傳結果
505
			#回傳結果
506
			return $result;
506
			return $result;
507
			
507
 
508
			}#if end
508
			}#if end
509
 
509
 
510
		#取得參數
510
		#取得參數
511
		$result["argu"]=$conf;
511
		$result["argu"]=$conf;
512
 
512
 
513
		#如果 $conf 不為陣列
513
		#如果 $conf 不為陣列
514
		if(gettype($conf)!=="array"){
514
		if(gettype($conf)!=="array"){
515
			
515
 
516
			#設置執行失敗
516
			#設置執行失敗
517
			$result["status"]="false";
517
			$result["status"]="false";
518
			
518
 
519
			#設置執行錯誤訊息
519
			#設置執行錯誤訊息
520
			$result["error"][]="\$conf變數須為陣列形態";
520
			$result["error"][]="\$conf變數須為陣列形態";
521
			
521
 
522
			#如果傳入的參數為 null
522
			#如果傳入的參數為 null
523
			if($conf===null){
523
			if($conf===null){
524
				
524
 
525
				#設置執行錯誤訊息
525
				#設置執行錯誤訊息
526
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
526
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
527
				
527
 
528
				}#if end
528
				}#if end
529
 
529
 
530
			#回傳結果
530
			#回傳結果
531
			return $result;
531
			return $result;
532
			
532
 
533
			}#if end
533
			}#if end
534
 
534
 
535
		#檢查參數
535
		#檢查參數
536
		#函式說明:
536
		#函式說明:
537
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
537
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
Line 564... Line 564...
564
		#$conf["canBeEmpty"]=array();
564
		#$conf["canBeEmpty"]=array();
565
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
565
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
566
		#$conf["skipableVariableCanNotBeEmpty"]=array();
566
		#$conf["skipableVariableCanNotBeEmpty"]=array();
567
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
567
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
568
		#$conf["skipableVariableName"]=array();
568
		#$conf["skipableVariableName"]=array();
569
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
569
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
570
		#$conf["skipableVariableType"]=array();
570
		#$conf["skipableVariableType"]=array();
571
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
571
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
572
		#$conf["skipableVarDefaultValue"]=array("");
572
		#$conf["skipableVarDefaultValue"]=array("");
573
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
573
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
574
		#$conf["arrayCountEqualCheck"][]=array();
574
		#$conf["arrayCountEqualCheck"][]=array();
Line 579... Line 579...
579
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
579
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
580
		unset($conf["variableCheck::checkArguments"]);
580
		unset($conf["variableCheck::checkArguments"]);
581
 
581
 
582
		#如果檢查參數失敗
582
		#如果檢查參數失敗
583
		if($checkArguments["status"]==="false"){
583
		if($checkArguments["status"]==="false"){
584
			
584
 
585
			#設置執行失敗
585
			#設置執行失敗
586
			$result["status"]="false";
586
			$result["status"]="false";
587
			
587
 
588
			#設置錯誤訊息
588
			#設置錯誤訊息
589
			$result["error"]=$checkArguments;
589
			$result["error"]=$checkArguments;
590
			
590
 
591
			#回傳結果
591
			#回傳結果
592
			return $result;
592
			return $result;
593
			
593
 
594
			}#if end
594
			}#if end
595
			
595
 
596
		#如果參數檢查不通過
596
		#如果參數檢查不通過
597
		if($checkArguments["passed"]==="false"){
597
		if($checkArguments["passed"]==="false"){
598
			
598
 
599
			#設置執行失敗
599
			#設置執行失敗
600
			$result["status"]="false";
600
			$result["status"]="false";
601
			
601
 
602
			#設置錯誤訊息
602
			#設置錯誤訊息
603
			$result["error"]=$checkArguments;
603
			$result["error"]=$checkArguments;
604
			
604
 
605
			#回傳結果
605
			#回傳結果
606
			return $result;
606
			return $result;
607
			
607
 
608
			}#if end
608
			}#if end
609
 
609
 
610
		#建立要寫入的行內容
610
		#建立要寫入的行內容
611
		$rCode[]="#宣告變數k,其值等於1";
611
		$rCode[]="#宣告變數k,其值等於1";
612
		$rCode[]="k=1";
612
		$rCode[]="k=1";
613
 
613
 
614
		$rCode[]="#檢視變數內容";
614
		$rCode[]="#檢視變數內容";
615
		$rCode[]="k";
615
		$rCode[]="k";
616
		
616
 
617
		$rCode[]="#判斷變數k是否爲integer";			
617
		$rCode[]="#判斷變數k是否爲integer";
618
		$rCode[]="is.integer(k)";
618
		$rCode[]="is.integer(k)";
619
		
619
 
620
		$rCode[]="#宣告變數k,其值等於integer型態的1";
620
		$rCode[]="#宣告變數k,其值等於integer型態的1";
621
		$rCode[]="k=as.integer(1)";
621
		$rCode[]="k=as.integer(1)";
622
		
622
 
623
		$rCode[]="#檢視變數內容";			
623
		$rCode[]="#檢視變數內容";
624
		$rCode[]="k";	
624
		$rCode[]="k";
625
		
625
 
626
		$rCode[]="#判斷變數k是否爲integer";	
626
		$rCode[]="#判斷變數k是否爲integer";
627
		$rCode[]="is.integer(k)";	
627
		$rCode[]="is.integer(k)";
628
		
628
 
629
		#涵式說明:
629
		#涵式說明:
630
		#建立R檔案
630
		#建立R檔案
631
		#回傳的結果:
631
		#回傳的結果:
632
		#true代表寫入成功,false代表寫入失敗
632
		#true代表寫入成功,false代表寫入失敗
633
		#必填的參數:
633
		#必填的參數:
Line 639... Line 639...
639
		$writeRfile=R::writeRfile($conf["R"]["writeRfile"]);
639
		$writeRfile=R::writeRfile($conf["R"]["writeRfile"]);
640
		unset($conf["R"]["writeRfile"]);
640
		unset($conf["R"]["writeRfile"]);
641
 
641
 
642
		#如果建立R腳本檔案失敗
642
		#如果建立R腳本檔案失敗
643
		if($writeRfile["status"]=="false"){
643
		if($writeRfile["status"]=="false"){
644
			
644
 
645
			#設置執行失敗
645
			#設置執行失敗
646
			$result["status"]="false";
646
			$result["status"]="false";
647
			
647
 
648
			#設置執行錯誤訊息
648
			#設置執行錯誤訊息
649
			$result["error"]=$writeRfile;
649
			$result["error"]=$writeRfile;
650
			
650
 
651
			#回傳結果
651
			#回傳結果
652
			return $result;
652
			return $result;
653
			
653
 
654
			}#if end
654
			}#if end
655
 
655
 
656
		#呼叫系統命令使用R來執行檔案內的指令,將結果輸出到檔案裏面。
656
		#呼叫系統命令使用R來執行檔案內的指令,將結果輸出到檔案裏面。
657
		#system("R <.rOutput/rDemo.R --no-save > .rOutput/".$_SESSION["username"]."-output");
657
		#system("R <.rOutput/rDemo.R --no-save > .rOutput/".$_SESSION["username"]."-output");
658
		#函式說明:
658
		#函式說明:
Line 671... Line 671...
671
		#$conf["disbaleOptimal"]="true";
671
		#$conf["disbaleOptimal"]="true";
672
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
672
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
673
		$conf["R::executeR"]["fileArgu"]=$conf["fileArgu"];
673
		$conf["R::executeR"]["fileArgu"]=$conf["fileArgu"];
674
		$executeR=R::executeR($conf["R::executeR"]);
674
		$executeR=R::executeR($conf["R::executeR"]);
675
		unset($conf["R::executeR"]);
675
		unset($conf["R::executeR"]);
676
		
676
 
677
		#如果執行R腳本失敗
677
		#如果執行R腳本失敗
678
		if($executeR["status"]=="false"){
678
		if($executeR["status"]=="false"){
679
			
679
 
680
			#設置執行失敗
680
			#設置執行失敗
681
			$result["status"]="false";
681
			$result["status"]="false";
682
			
682
 
683
			#設置執行錯誤訊息
683
			#設置執行錯誤訊息
684
			$result["error"]=$executeR;
684
			$result["error"]=$executeR;
685
			
685
 
686
			#回傳結果
686
			#回傳結果
687
			return $result;
687
			return $result;
688
			
688
 
689
			}#if end
689
			}#if end
690
					
690
 
691
		#取得執行完的結果
691
		#取得執行完的結果
692
		$result["content"]=$executeR["lineArray"];
692
		$result["content"]=$executeR["lineArray"];
693
 
693
 
694
		#設置執行正常
694
		#設置執行正常
695
		$result["status"]="true";
695
		$result["status"]="true";
Line 726... Line 726...
726
		#取得當前執行的函數名稱
726
		#取得當前執行的函數名稱
727
		$result["function"]=__FUNCTION__;
727
		$result["function"]=__FUNCTION__;
728
 
728
 
729
		#如果沒有參數
729
		#如果沒有參數
730
		if(func_num_args()==0){
730
		if(func_num_args()==0){
731
			
731
 
732
			#設置執行失敗
732
			#設置執行失敗
733
			$result["status"]="false";
733
			$result["status"]="false";
734
			
734
 
735
			#設置執行錯誤訊息
735
			#設置執行錯誤訊息
736
			$result["error"]="函數".$result["function"]."需要參數";
736
			$result["error"]="函數".$result["function"]."需要參數";
737
			
737
 
738
			#回傳結果
738
			#回傳結果
739
			return $result;
739
			return $result;
740
			
740
 
741
			}#if end
741
			}#if end
742
 
742
 
743
		#取得參數
743
		#取得參數
744
		$result["argu"]=$conf;
744
		$result["argu"]=$conf;
745
 
745
 
746
		#如果 $conf 不為陣列
746
		#如果 $conf 不為陣列
747
		if(gettype($conf)!=="array"){
747
		if(gettype($conf)!=="array"){
748
			
748
 
749
			#設置執行失敗
749
			#設置執行失敗
750
			$result["status"]="false";
750
			$result["status"]="false";
751
			
751
 
752
			#設置執行錯誤訊息
752
			#設置執行錯誤訊息
753
			$result["error"][]="\$conf變數須為陣列形態";
753
			$result["error"][]="\$conf變數須為陣列形態";
754
			
754
 
755
			#如果傳入的參數為 null
755
			#如果傳入的參數為 null
756
			if($conf===null){
756
			if($conf===null){
757
				
757
 
758
				#設置執行錯誤訊息
758
				#設置執行錯誤訊息
759
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
759
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
760
				
760
 
761
				}#if end
761
				}#if end
762
 
762
 
763
			#回傳結果
763
			#回傳結果
764
			return $result;
764
			return $result;
765
			
765
 
766
			}#if end
766
			}#if end
767
 
767
 
768
		#檢查參數
768
		#檢查參數
769
		#函式說明:
769
		#函式說明:
770
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
770
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
Line 797... Line 797...
797
		#$conf["canBeEmpty"]=array();
797
		#$conf["canBeEmpty"]=array();
798
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
798
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
799
		#$conf["skipableVariableCanNotBeEmpty"]=array();
799
		#$conf["skipableVariableCanNotBeEmpty"]=array();
800
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
800
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
801
		#$conf["skipableVariableName"]=array();
801
		#$conf["skipableVariableName"]=array();
802
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
802
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
803
		#$conf["skipableVariableType"]=array();
803
		#$conf["skipableVariableType"]=array();
804
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
804
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
805
		#$conf["skipableVarDefaultValue"]=array("");
805
		#$conf["skipableVarDefaultValue"]=array("");
806
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
806
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
807
		#$conf["arrayCountEqualCheck"][]=array();
807
		#$conf["arrayCountEqualCheck"][]=array();
Line 812... Line 812...
812
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
812
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
813
		unset($conf["variableCheck::checkArguments"]);
813
		unset($conf["variableCheck::checkArguments"]);
814
 
814
 
815
		#如果檢查參數失敗
815
		#如果檢查參數失敗
816
		if($checkArguments["status"]==="false"){
816
		if($checkArguments["status"]==="false"){
817
			
817
 
818
			#設置執行失敗
818
			#設置執行失敗
819
			$result["status"]="false";
819
			$result["status"]="false";
820
			
820
 
821
			#設置錯誤訊息
821
			#設置錯誤訊息
822
			$result["error"]=$checkArguments;
822
			$result["error"]=$checkArguments;
823
			
823
 
824
			#回傳結果
824
			#回傳結果
825
			return $result;
825
			return $result;
826
			
826
 
827
			}#if end
827
			}#if end
828
			
828
 
829
		#如果參數檢查不通過
829
		#如果參數檢查不通過
830
		if($checkArguments["passed"]==="false"){
830
		if($checkArguments["passed"]==="false"){
831
			
831
 
832
			#設置執行失敗
832
			#設置執行失敗
833
			$result["status"]="false";
833
			$result["status"]="false";
834
			
834
 
835
			#設置錯誤訊息
835
			#設置錯誤訊息
836
			$result["error"]=$checkArguments;
836
			$result["error"]=$checkArguments;
837
			
837
 
838
			#回傳結果
838
			#回傳結果
839
			return $result;
839
			return $result;
840
			
840
 
841
			}#if end
841
			}#if end
842
 
842
 
843
		#建立要寫入的行內容
843
		#建立要寫入的行內容
844
		$rCode[]="#創建圖片,將繪圖的結果都存在該圖裏面";
844
		$rCode[]="#創建圖片,將繪圖的結果都存在該圖裏面";
845
		$rCode[]="svg(filename=\".rOutput/temp.svg\")";
845
		$rCode[]="svg(filename=\".rOutput/temp.svg\")";
Line 847... Line 847...
847
		$rCode[]="#產生常態分配資料100筆";
847
		$rCode[]="#產生常態分配資料100筆";
848
		$rCode[]="y=rnorm(100,5,10)";
848
		$rCode[]="y=rnorm(100,5,10)";
849
 
849
 
850
		$rCode[]="#繪製直方圖";
850
		$rCode[]="#繪製直方圖";
851
		$rCode[]="hist(y,prob=TRUE)";
851
		$rCode[]="hist(y,prob=TRUE)";
852
		
852
 
853
		#涵式說明:
853
		#涵式說明:
854
		#建立R檔案
854
		#建立R檔案
855
		#回傳的結果:
855
		#回傳的結果:
856
		#true代表寫入成功,false代表寫入失敗
856
		#true代表寫入成功,false代表寫入失敗
857
		#必填的參數:
857
		#必填的參數:
Line 862... Line 862...
862
		$writeRfile=R::writeRfile($conf["R"]["writeRfile"]);
862
		$writeRfile=R::writeRfile($conf["R"]["writeRfile"]);
863
		unset($conf["R"]["writeRfile"]);
863
		unset($conf["R"]["writeRfile"]);
864
 
864
 
865
		#如果建立R腳本檔案失敗
865
		#如果建立R腳本檔案失敗
866
		if($writeRfile["status"]=="false"){
866
		if($writeRfile["status"]=="false"){
867
			
867
 
868
			#設置執行失敗
868
			#設置執行失敗
869
			$result["status"]="false";
869
			$result["status"]="false";
870
			
870
 
871
			#設置執行錯誤訊息
871
			#設置執行錯誤訊息
872
			$result["error"]=$writeRfile;
872
			$result["error"]=$writeRfile;
873
			
873
 
874
			#回傳結果
874
			#回傳結果
875
			return $result;
875
			return $result;
876
			
876
 
877
			}#if end
877
			}#if end
878
 
878
 
879
		#呼叫系統命令使用R來執行檔案內的指令,將結果輸出到檔案裏面。
879
		#呼叫系統命令使用R來執行檔案內的指令,將結果輸出到檔案裏面。
880
		#system("R <.rOutput/rDemo.R --no-save > .rOutput/".$_SESSION["username"]."-output");
880
		#system("R <.rOutput/rDemo.R --no-save > .rOutput/".$_SESSION["username"]."-output");
881
		#函式說明:
881
		#函式說明:
Line 894... Line 894...
894
		#可省略的參數:
894
		#可省略的參數:
895
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
895
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
896
		#$conf["disbaleOptimal"]="true";
896
		#$conf["disbaleOptimal"]="true";
897
		$executeR=R::executeR($conf["R::executeR"]);
897
		$executeR=R::executeR($conf["R::executeR"]);
898
		unset($conf["R::executeR"]);
898
		unset($conf["R::executeR"]);
899
		
899
 
900
		#如果執行R腳本失敗
900
		#如果執行R腳本失敗
901
		if($executeR["status"]=="false"){
901
		if($executeR["status"]=="false"){
902
			
902
 
903
			#設置執行失敗
903
			#設置執行失敗
904
			$result["status"]="false";
904
			$result["status"]="false";
905
			
905
 
906
			#設置執行錯誤訊息
906
			#設置執行錯誤訊息
907
			$result["error"]=$executeR;
907
			$result["error"]=$executeR;
908
			
908
 
909
			#回傳結果
909
			#回傳結果
910
			return $result;
910
			return $result;
911
			
911
 
912
			}#if end
912
			}#if end
913
 
913
 
914
		#印出統計圖的語法
914
		#印出統計圖的語法
915
		#函數說明:
915
		#函數說明:
916
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
916
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
917
		#回傳結果:
917
		#回傳結果:
918
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
918
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
919
		#$result["error"],錯誤訊息
919
		#$result["error"],錯誤訊息
920
		#$result["content"],圖片的連結資訊
920
		#$result["content"],圖片的連結資訊
921
		#$result["function"],當前執行的函數名稱 
921
		#$result["function"],當前執行的函數名稱
922
		#必填參數:
922
		#必填參數:
923
		#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
923
		#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
924
		$conf["img::data"]["imgPosition"]=".rOutput/temp.svg";
924
		$conf["img::data"]["imgPosition"]=".rOutput/temp.svg";
925
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
925
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
926
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
926
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
Line 943... Line 943...
943
		$data=img::data($conf["img::data"]);
943
		$data=img::data($conf["img::data"]);
944
		unset($conf["img::data"]);
944
		unset($conf["img::data"]);
945
 
945
 
946
		#如果顯示圖片失敗
946
		#如果顯示圖片失敗
947
		if($data["status"]=="false"){
947
		if($data["status"]=="false"){
948
			
948
 
949
			#設置執行失敗
949
			#設置執行失敗
950
			$result["status"]="false";
950
			$result["status"]="false";
951
			
951
 
952
			#設置執行錯誤訊息
952
			#設置執行錯誤訊息
953
			$result["error"]=$data;
953
			$result["error"]=$data;
954
			
954
 
955
			#回傳結果
955
			#回傳結果
956
			return $result;
956
			return $result;
957
			
957
 
958
			}#if end
958
			}#if end
959
 
959
 
960
		#取得執行R過後的結果
960
		#取得執行R過後的結果
961
		$result["text"]=$executeR["lineArray"];
961
		$result["text"]=$executeR["lineArray"];
962
 
962
 
Line 968... Line 968...
968
 
968
 
969
		#回傳結果
969
		#回傳結果
970
		return $result;
970
		return $result;
971
 
971
 
972
		}#function demoGraphiOutput end
972
		}#function demoGraphiOutput end
973
	
973
 
974
	/*
974
	/*
975
	#涵式說明:
975
	#涵式說明:
976
	#建立R檔案
976
	#建立R檔案
977
	#回傳的結果:
977
	#回傳的結果:
978
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
978
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
Line 990... Line 990...
990
	#無.
990
	#無.
991
	#參考資料:
991
	#參考資料:
992
	#無.
992
	#無.
993
	#備註:
993
	#備註:
994
	#無.
994
	#無.
995
	*/		
995
	*/
996
	public static function writeRfile(&$conf=array()){
996
	public static function writeRfile(&$conf=array()){
997
		
997
 
998
		#初始化要回傳的結果
998
		#初始化要回傳的結果
999
		$result=array();
999
		$result=array();
1000
		
1000
 
1001
		#設置當前執行的涵式
1001
		#設置當前執行的涵式
1002
		$result["function"]=__FUNCTION__;
1002
		$result["function"]=__FUNCTION__;
1003
		
1003
 
1004
		#如果 $conf 不等於 "array"
1004
		#如果 $conf 不等於 "array"
1005
		if(gettype($conf)!="array"){				
1005
		if(gettype($conf)!="array"){
1006
			
1006
 
1007
			#設定錯誤識別
1007
			#設定錯誤識別
1008
			$result["status"]="false";
1008
			$result["status"]="false";
1009
			
1009
 
1010
			#設置錯誤訊息
1010
			#設置錯誤訊息
1011
			$result["error"]="參數的Key指定有誤!";
1011
			$result["error"]="參數的Key指定有誤!";
1012
			
1012
 
1013
			#如果傳入的參數為 null
1013
			#如果傳入的參數為 null
1014
			if($conf==null){
1014
			if($conf==null){
1015
				
1015
 
1016
				#設置執行錯誤訊息
1016
				#設置執行錯誤訊息
1017
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1017
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1018
				
1018
 
1019
				}#if end
1019
				}#if end
1020
			
1020
 
1021
			#回傳結果
1021
			#回傳結果
1022
			return $result;
1022
			return $result;
1023
			
1023
 
1024
			}#if end
1024
			}#if end
1025
		
1025
 
1026
		#檢查參數
1026
		#檢查參數
1027
		#涵式說明:
1027
		#涵式說明:
1028
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1028
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1029
		#回傳的結果:
1029
		#回傳的結果:
1030
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1030
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1033... Line 1033...
1033
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1033
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1034
		#必填寫的參數:
1034
		#必填寫的參數:
1035
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1035
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1036
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("addAndName","textToWrite","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1036
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("addAndName","textToWrite","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1037
		#可以省略的參數:
1037
		#可以省略的參數:
1038
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
1038
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
1039
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1039
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1040
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1040
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1041
		unset($conf["variableCheck"]["isexistMuti"]);
1041
		unset($conf["variableCheck"]["isexistMuti"]);
1042
		
1042
 
1043
		#如果 $checkResult["status"] 等於 "false"
1043
		#如果 $checkResult["status"] 等於 "false"
1044
		if($checkResult["status"]=="false"){
1044
		if($checkResult["status"]=="false"){
1045
		
1045
 
1046
			#設置錯誤識別
1046
			#設置錯誤識別
1047
			$result["status"]="false";
1047
			$result["status"]="false";
1048
			
1048
 
1049
			#設置錯誤訊息
1049
			#設置錯誤訊息
1050
			$result["error"]=$checkResult;
1050
			$result["error"]=$checkResult;
1051
			
1051
 
1052
			#回傳結果
1052
			#回傳結果
1053
			return $result;
1053
			return $result;
1054
			
1054
 
1055
			}#if end
1055
			}#if end
1056
			
1056
 
1057
		#如果 $checkResult["passed"] 等於 "false"
1057
		#如果 $checkResult["passed"] 等於 "false"
1058
		if($checkResult["passed"]=="false"){
1058
		if($checkResult["passed"]=="false"){
1059
			
1059
 
1060
			#設置錯誤識別
1060
			#設置錯誤識別
1061
			$result["status"]="false";
1061
			$result["status"]="false";
1062
			
1062
 
1063
			#設置錯誤訊息
1063
			#設置錯誤訊息
1064
			$result["error"]=$checkResult;
1064
			$result["error"]=$checkResult;
1065
			
1065
 
1066
			#回傳結果
1066
			#回傳結果
1067
			return $result;
1067
			return $result;
1068
			
1068
 
1069
			}#if end
1069
			}#if end
1070
		
1070
 
1071
		#建立R腳本檔
1071
		#建立R腳本檔
1072
		#函式說明:
1072
		#函式說明:
1073
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
1073
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
1074
		#回傳的結果:
1074
		#回傳的結果:
1075
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
1075
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
Line 1082... Line 1082...
1082
		$conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=$conf["addAndName"];
1082
		$conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=$conf["addAndName"];
1083
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1083
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1084
		$conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
1084
		$conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
1085
		$createResult=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
1085
		$createResult=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
1086
		unset($conf["fileAccess"]["createFileAfterCheck"]);
1086
		unset($conf["fileAccess"]["createFileAfterCheck"]);
1087
		
1087
 
1088
		#如果R腳本檔案建立失敗
1088
		#如果R腳本檔案建立失敗
1089
		if($createResult["status"]=="false"){
1089
		if($createResult["status"]=="false"){
1090
			
1090
 
1091
			#建立錯誤識別
1091
			#建立錯誤識別
1092
			$result["status"]="false";
1092
			$result["status"]="false";
1093
			
1093
 
1094
			#建立錯誤訊息
1094
			#建立錯誤訊息
1095
			$result["error"]=$createResult;
1095
			$result["error"]=$createResult;
1096
			
1096
 
1097
			#回傳結果
1097
			#回傳結果
1098
			return $result;
1098
			return $result;
1099
			
1099
 
1100
			}#if end
1100
			}#if end
1101
			
1101
 
1102
		#取得R腳本檔的位置與名稱
1102
		#取得R腳本檔的位置與名稱
1103
		$result["newCreatedRfilePathAndName"]=$createResult["createdFilePathAndName"];
1103
		$result["newCreatedRfilePathAndName"]=$createResult["createdFilePathAndName"];
1104
		
1104
 
1105
		#針對$conf["textToWrite"]的每個元素
1105
		#針對$conf["textToWrite"]的每個元素
1106
		foreach($conf["textToWrite"] as $key=>$value){
1106
		foreach($conf["textToWrite"] as $key=>$value){
1107
			
1107
 
1108
			#涵式說明:
1108
			#涵式說明:
1109
			#將字串寫入到檔案
1109
			#將字串寫入到檔案
1110
			#回傳的結果:
1110
			#回傳的結果:
1111
			#$result,true表示檔案建立成功,false表示檔案建立失敗
1111
			#$result,true表示檔案建立成功,false表示檔案建立失敗
1112
			#必填的參數:
1112
			#必填的參數:
Line 1121... Line 1121...
1121
			#如果 寫入結果爲 "false"
1121
			#如果 寫入結果爲 "false"
1122
			if($writeFileresult["status"]=="false"){
1122
			if($writeFileresult["status"]=="false"){
1123
 
1123
 
1124
				#設置錯誤識別
1124
				#設置錯誤識別
1125
				$result["status"]="false";
1125
				$result["status"]="false";
1126
				
1126
 
1127
				#設置錯誤訊息
1127
				#設置錯誤訊息
1128
				$result["error"][]="寫入檔案失敗,可能http沒有權限,或 ".$conf["addAndName"]." 檔案不存在.";
1128
				$result["error"][]="寫入檔案失敗,可能http沒有權限,或 ".$conf["addAndName"]." 檔案不存在.";
1129
 
1129
 
1130
				#回傳結果
1130
				#回傳結果
1131
				return $result;
1131
				return $result;
1132
 
1132
 
1133
				}#if end
1133
				}#if end
1134
 
1134
 
1135
			}#foreach end
1135
			}#foreach end
1136
			
1136
 
1137
		#執行到這邊代表執行成功
1137
		#執行到這邊代表執行成功
1138
		$result["status"]="true";
1138
		$result["status"]="true";
1139
		
1139
 
1140
		#回傳結果
1140
		#回傳結果
1141
		return $result;
1141
		return $result;
1142
 
1142
 
1143
		}#function createRfile end
1143
		}#function createRfile end
1144
		
1144
 
1145
	/*
1145
	/*
1146
	#函式說明:
1146
	#函式說明:
1147
	#針對csv樣本檔作決策樹分析,可以設定分析完後是否要刪除csv樣本檔.
1147
	#針對csv樣本檔作決策樹分析,可以設定分析完後是否要刪除csv樣本檔.
1148
	#回傳的結果:
1148
	#回傳的結果:
1149
	#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
1149
	#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
Line 1175... Line 1175...
1175
	#R的決策樹分析範例=>http://www.rdatamining.com/examples/decision-tree
1175
	#R的決策樹分析範例=>http://www.rdatamining.com/examples/decision-tree
1176
	#備註:
1176
	#備註:
1177
	#測試資料分析尚未撰寫
1177
	#測試資料分析尚未撰寫
1178
	*/
1178
	*/
1179
	public static function decisionTreeWithPackageParty(&$conf){
1179
	public static function decisionTreeWithPackageParty(&$conf){
1180
		
1180
 
1181
		#初始化要回傳的結果
1181
		#初始化要回傳的結果
1182
		$result=array();
1182
		$result=array();
1183
		
1183
 
1184
		#取得當前執行函數名稱
1184
		#取得當前執行函數名稱
1185
		$result["function"]=__FUNCTION__;
1185
		$result["function"]=__FUNCTION__;
1186
		
1186
 
1187
		#如果 $conf 不為陣列
1187
		#如果 $conf 不為陣列
1188
		if(gettype($conf)!="array"){
1188
		if(gettype($conf)!="array"){
1189
			
1189
 
1190
			#設置執行失敗
1190
			#設置執行失敗
1191
			$result["status"]="false";
1191
			$result["status"]="false";
1192
			
1192
 
1193
			#設置執行錯誤訊息
1193
			#設置執行錯誤訊息
1194
			$result["error"][]="\$conf變數須為陣列形態";
1194
			$result["error"][]="\$conf變數須為陣列形態";
1195
 
1195
 
1196
			#如果傳入的參數為 null
1196
			#如果傳入的參數為 null
1197
			if($conf==null){
1197
			if($conf==null){
1198
				
1198
 
1199
				#設置執行錯誤訊息
1199
				#設置執行錯誤訊息
1200
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1200
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1201
				
1201
 
1202
				}#if end
1202
				}#if end
1203
 
1203
 
1204
			#回傳結果
1204
			#回傳結果
1205
			return $result;
1205
			return $result;
1206
			
1206
 
1207
			}#if end
1207
			}#if end
1208
		
1208
 
1209
		#檢查參數
1209
		#檢查參數
1210
		#涵式說明:
1210
		#涵式說明:
1211
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1211
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1212
		#回傳的結果:
1212
		#回傳的結果:
1213
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1213
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1216... Line 1216...
1216
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1216
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1217
		#必填寫的參數:
1217
		#必填寫的參數:
1218
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1218
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
1219
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","inputCsvFilePosition","targetVar","independentVar");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1219
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","inputCsvFilePosition","targetVar","independentVar");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1220
		#可以省略的參數:
1220
		#可以省略的參數:
1221
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
1221
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
1222
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1222
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1223
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1223
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
1224
		unset($conf["variableCheck"]["isexistMuti"]);
1224
		unset($conf["variableCheck"]["isexistMuti"]);
1225
		
1225
 
1226
		#如果 $checkResult["status"] 等於 "false"
1226
		#如果 $checkResult["status"] 等於 "false"
1227
		if($checkResult["status"]=="false"){
1227
		if($checkResult["status"]=="false"){
1228
			
1228
 
1229
			#設置錯誤識別
1229
			#設置錯誤識別
1230
			$result["status"]="false";
1230
			$result["status"]="false";
1231
			
1231
 
1232
			#設置錯誤訊息
1232
			#設置錯誤訊息
1233
			$result["error"]=$checkResult;
1233
			$result["error"]=$checkResult;
1234
			
1234
 
1235
			#回傳結果
1235
			#回傳結果
1236
			return $result;
1236
			return $result;
1237
			
1237
 
1238
			}#if end
1238
			}#if end
1239
			
1239
 
1240
		#如果 $checkResult["passed"] 等於 "false"
1240
		#如果 $checkResult["passed"] 等於 "false"
1241
		if($checkResult["passed"]=="false"){
1241
		if($checkResult["passed"]=="false"){
1242
			
1242
 
1243
			#設置錯誤識別
1243
			#設置錯誤識別
1244
			$result["status"]="false";
1244
			$result["status"]="false";
1245
			
1245
 
1246
			#設置錯誤訊息
1246
			#設置錯誤訊息
1247
			$result["error"]=$checkResult;
1247
			$result["error"]=$checkResult;
1248
			
1248
 
1249
			#回傳結果
1249
			#回傳結果
1250
			return $result;
1250
			return $result;
1251
			
1251
 
1252
			}#if end
1252
			}#if end
1253
		
1253
 
1254
		#如果 $conf["trainDataPercent"] 未設定
1254
		#如果 $conf["trainDataPercent"] 未設定
1255
		if(!isset($conf["trainDataPercent"])){
1255
		if(!isset($conf["trainDataPercent"])){
1256
			
1256
 
1257
			#預設為 0.7
1257
			#預設為 0.7
1258
			$conf["trainDataPercent"]="0.7";
1258
			$conf["trainDataPercent"]="0.7";
1259
			
1259
 
1260
			}#if end
1260
			}#if end
1261
		
1261
 
1262
		#如果 $conf["testDataPercent"] 未設定	
1262
		#如果 $conf["testDataPercent"] 未設定
1263
		if(!isset($conf["testDataPercent"])){
1263
		if(!isset($conf["testDataPercent"])){
1264
			
1264
 
1265
			#預設為 0.3
1265
			#預設為 0.3
1266
			$conf["testDataPercent"]="0.3";
1266
			$conf["testDataPercent"]="0.3";
1267
			
1267
 
1268
			}#if end
1268
			}#if end
1269
			
1269
 
1270
		#如果 $conf["trainDataReportImgPositionAndName"] 未設定
1270
		#如果 $conf["trainDataReportImgPositionAndName"] 未設定
1271
		if(!isset($conf["trainDataReportImgPositionAndName"])){
1271
		if(!isset($conf["trainDataReportImgPositionAndName"])){
1272
		
1272
 
1273
			#預設為 trainDataReport.png
1273
			#預設為 trainDataReport.png
1274
			$conf["trainDataReportImgPositionAndName"]="report.png";
1274
			$conf["trainDataReportImgPositionAndName"]="report.png";
1275
			
1275
 
1276
			}#if end
1276
			}#if end
1277
			
1277
 
1278
		#如果 $conf["delSampleCsvFile"] 未設定
1278
		#如果 $conf["delSampleCsvFile"] 未設定
1279
		if(!isset($conf["delSampleCsvFile"])){
1279
		if(!isset($conf["delSampleCsvFile"])){
1280
			
1280
 
1281
			#預設為 "false"
1281
			#預設為 "false"
1282
			$conf["delSampleCsvFile"]="false";
1282
			$conf["delSampleCsvFile"]="false";
1283
			
1283
 
1284
			}#if end
1284
			}#if end
1285
		
1285
 
1286
		#初始化要寫入到R腳本的內容
1286
		#初始化要寫入到R腳本的內容
1287
		$rCode=array();
1287
		$rCode=array();
1288
		
1288
 
1289
		#讀取 csv檔的內容
1289
		#讀取 csv檔的內容
1290
		$rCode[]="Data <- read.csv(\"".$conf["inputCsvFilePosition"]."\")";
1290
		$rCode[]="Data <- read.csv(\"".$conf["inputCsvFilePosition"]."\")";
1291
		
1291
 
1292
		#分割讀到的資料檔為訓練資料、測試資料
1292
		#分割讀到的資料檔為訓練資料、測試資料
1293
		$rCode[]="ind <- sample(2, nrow(Data), replace=TRUE, prob=c(".$conf["trainDataPercent"].",".$conf["testDataPercent"]."))";
1293
		$rCode[]="ind <- sample(2, nrow(Data), replace=TRUE, prob=c(".$conf["trainDataPercent"].",".$conf["testDataPercent"]."))";
1294
			
1294
 
1295
		#將Data的第一組資料,亦即70%的Data資料放置到trainData裡面作為訓練資料。
1295
		#將Data的第一組資料,亦即70%的Data資料放置到trainData裡面作為訓練資料。
1296
		$rCode[]="trainData <- Data[ind==1,]";
1296
		$rCode[]="trainData <- Data[ind==1,]";
1297
 
1297
 
1298
		#將Data的第二組資料,亦即30%的Data資料放置到testData裡面作為測試資料。
1298
		#將Data的第二組資料,亦即30%的Data資料放置到testData裡面作為測試資料。
1299
		$rCode[]="testData <- Data[ind==2,]";
1299
		$rCode[]="testData <- Data[ind==2,]";
1300
		
1300
 
1301
		#使用 party 套件,內包含 ctree()與predict()
1301
		#使用 party 套件,內包含 ctree()與predict()
1302
		$rCode[]="library(party)";
1302
		$rCode[]="library(party)";
1303
		
1303
 
1304
		#建立要預測變數的字串
1304
		#建立要預測變數的字串
1305
		#myFormula指定 $conf["targetVar"] 為被預測變數,其他變數則為獨立變數.
1305
		#myFormula指定 $conf["targetVar"] 為被預測變數,其他變數則為獨立變數.
1306
		$formula="myFormula <- ".$conf["targetVar"]." ~ ";
1306
		$formula="myFormula <- ".$conf["targetVar"]." ~ ";
1307
					
1307
 
1308
		#初始化獨立變數的字串
1308
		#初始化獨立變數的字串
1309
		$independentStr="";
1309
		$independentStr="";
1310
		
1310
 
1311
		#建立獨立變數字串
1311
		#建立獨立變數字串
1312
		for($i=0;$i<count($conf["independentVar"]);$i++){
1312
		for($i=0;$i<count($conf["independentVar"]);$i++){
1313
			
1313
 
1314
			#串連獨立變數字串
1314
			#串連獨立變數字串
1315
			$independentStr=$independentStr." + ".$conf["independentVar"][$i];
1315
			$independentStr=$independentStr." + ".$conf["independentVar"][$i];
1316
			
1316
 
1317
			}#for end
1317
			}#for end
1318
			
1318
 
1319
		#儲存要預測變數與獨立變數到R腳本裡面
1319
		#儲存要預測變數與獨立變數到R腳本裡面
1320
		$rCode[]=$formula.$independentStr;
1320
		$rCode[]=$formula.$independentStr;
1321
			
1321
 
1322
		#使用 ctree 建立決策樹,被預測變數與預測變數的設定存在myFormula,用來建立決策樹的資料為儲存在trainData的資料
1322
		#使用 ctree 建立決策樹,被預測變數與預測變數的設定存在myFormula,用來建立決策樹的資料為儲存在trainData的資料
1323
		$rCode[]="Data_ctree <- ctree(myFormula, data=trainData)";
1323
		$rCode[]="Data_ctree <- ctree(myFormula, data=trainData)";
1324
			
1324
 
1325
		#用表來檢測預測的狀態
1325
		#用表來檢測預測的狀態
1326
		$rCode[]="table(predict(Data_ctree), trainData$".$conf["targetVar"].")";
1326
		$rCode[]="table(predict(Data_ctree), trainData$".$conf["targetVar"].")";
1327
			
1327
 
1328
		#輸出文字模式的決策樹結果
1328
		#輸出文字模式的決策樹結果
1329
		$rCode[]="print(Data_ctree)";
1329
		$rCode[]="print(Data_ctree)";
1330
			
1330
 
1331
		#指定等等繪製出來的圖表要儲存在哪邊,寬度與高度為何。
1331
		#指定等等繪製出來的圖表要儲存在哪邊,寬度與高度為何。
1332
		$rCode[]="svg(filename=\"".$conf["trainDataReportImgPositionAndName"]."\")";	
1332
		$rCode[]="svg(filename=\"".$conf["trainDataReportImgPositionAndName"]."\")";
1333
		
1333
 
1334
		#畫出詳細版的決策樹結果,含預測出來的變數內容為何。
1334
		#畫出詳細版的決策樹結果,含預測出來的變數內容為何。
1335
		$rCode[]="plot(Data_ctree)";
1335
		$rCode[]="plot(Data_ctree)";
1336
		
1336
 
1337
		#預測測試資料
1337
		#預測測試資料
1338
		$rCode[]="testPred <- predict(Data_ctree, newdata = testData)";
1338
		$rCode[]="testPred <- predict(Data_ctree, newdata = testData)";
1339
		$rCode[]="table(testPred, testData$".$conf["targetVar"].")";
1339
		$rCode[]="table(testPred, testData$".$conf["targetVar"].")";
1340
			
1340
 
1341
		#寫入R腳本的內容
1341
		#寫入R腳本的內容
1342
		#涵式說明:
1342
		#涵式說明:
1343
		#建立R檔案
1343
		#建立R檔案
1344
		#回傳的結果:
1344
		#回傳的結果:
1345
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
1345
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
Line 1350... Line 1350...
1350
		$conf["R"]["writeRfile"]["textToWrite"]=$rCode;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
1350
		$conf["R"]["writeRfile"]["textToWrite"]=$rCode;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
1351
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1351
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1352
		$conf["R"]["writeRfile"]["fileArgu"]=$conf["fileArgu"];
1352
		$conf["R"]["writeRfile"]["fileArgu"]=$conf["fileArgu"];
1353
		$writeRfileResult=R::writeRfile($conf["R"]["writeRfile"]);
1353
		$writeRfileResult=R::writeRfile($conf["R"]["writeRfile"]);
1354
		unset($conf["R"]["writeRfile"]);
1354
		unset($conf["R"]["writeRfile"]);
1355
		
1355
 
1356
		#var_dump($writeRfileResult);
1356
		#var_dump($writeRfileResult);
1357
		
1357
 
1358
		#如果 $writeRfileResult["status"] 等於 "false"
1358
		#如果 $writeRfileResult["status"] 等於 "false"
1359
		if($writeRfileResult["status"]=="false"){
1359
		if($writeRfileResult["status"]=="false"){
1360
			
1360
 
1361
			#設置錯誤識別
1361
			#設置錯誤識別
1362
			$result["status"]="false";
1362
			$result["status"]="false";
1363
			
1363
 
1364
			#設置錯誤訊息
1364
			#設置錯誤訊息
1365
			$result["error"]=$writeRfileResult;
1365
			$result["error"]=$writeRfileResult;
1366
			
1366
 
1367
			#回傳結果
1367
			#回傳結果
1368
			return $result;
1368
			return $result;
1369
			
1369
 
1370
			}#if end
1370
			}#if end
1371
			
1371
 
1372
		#執行 R 腳本
1372
		#執行 R 腳本
1373
		#函式說明:
1373
		#函式說明:
1374
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
1374
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
1375
		#回傳的結果:
1375
		#回傳的結果:
1376
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1376
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1385... Line 1385...
1385
		#可省略的參數:
1385
		#可省略的參數:
1386
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
1386
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
1387
		#$conf["R"]["executeR"]["disbaleOptimal"]="true";
1387
		#$conf["R"]["executeR"]["disbaleOptimal"]="true";
1388
		$executeRresult=R::executeR($conf["R"]["executeR"]);
1388
		$executeRresult=R::executeR($conf["R"]["executeR"]);
1389
		unset($conf["R"]["executeR"]);
1389
		unset($conf["R"]["executeR"]);
1390
		
1390
 
1391
		#如果 $executeRresult["status"] 等於 "false"
1391
		#如果 $executeRresult["status"] 等於 "false"
1392
		if($executeRresult["status"]=="false"){
1392
		if($executeRresult["status"]=="false"){
1393
			
1393
 
1394
			#設置錯誤識別
1394
			#設置錯誤識別
1395
			$result["status"]="false";
1395
			$result["status"]="false";
1396
			
1396
 
1397
			#設置錯誤訊息
1397
			#設置錯誤訊息
1398
			$result["error"]=$executeRresult;
1398
			$result["error"]=$executeRresult;
1399
			
1399
 
1400
			#回傳結果
1400
			#回傳結果
1401
			return $result;
1401
			return $result;
1402
			
1402
 
1403
			}#if end
1403
			}#if end
1404
		
1404
 
1405
		#如果 $conf["delSampleCsvFile"] 等於 "true"
1405
		#如果 $conf["delSampleCsvFile"] 等於 "true"
1406
		if($conf["delSampleCsvFile"]=="true"){
1406
		if($conf["delSampleCsvFile"]=="true"){
1407
			
1407
 
1408
			#則要移除樣本csv檔案
1408
			#則要移除樣本csv檔案
1409
			#涵式說明:
1409
			#涵式說明:
1410
			#移除檔案
1410
			#移除檔案
1411
			#回傳的結果:
1411
			#回傳的結果:
1412
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
1412
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
Line 1414... Line 1414...
1414
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1414
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1415
			$conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
1415
			$conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
1416
			$conf["fileAccess"]["delFile"]["fileAddress"]=$conf["inputCsvFilePosition"];#要移除檔案的位置
1416
			$conf["fileAccess"]["delFile"]["fileAddress"]=$conf["inputCsvFilePosition"];#要移除檔案的位置
1417
			$eraseSampleCsvResult=fileAccess::delFile($conf["fileAccess"]["delFile"]);
1417
			$eraseSampleCsvResult=fileAccess::delFile($conf["fileAccess"]["delFile"]);
1418
			unset($conf["fileAccess"]["delFile"]);
1418
			unset($conf["fileAccess"]["delFile"]);
1419
			
1419
 
1420
			#如果 $eraseSampleCsvResult["status"] 等於 "false"
1420
			#如果 $eraseSampleCsvResult["status"] 等於 "false"
1421
			if($eraseSampleCsvResult["status"]=="false"){
1421
			if($eraseSampleCsvResult["status"]=="false"){
1422
				
1422
 
1423
				#設置錯誤識別
1423
				#設置錯誤識別
1424
				$result["status"]="false";
1424
				$result["status"]="false";
1425
			
1425
 
1426
				#設置錯誤訊息
1426
				#設置錯誤訊息
1427
				$result["error"]=$eraseSampleCsvResult;
1427
				$result["error"]=$eraseSampleCsvResult;
1428
				
1428
 
1429
				#回傳結果
1429
				#回傳結果
1430
				return $result;
1430
				return $result;
1431
				
1431
 
1432
				}#if end
1432
				}#if end
1433
			
1433
 
1434
			}#if end	
1434
			}#if end
1435
			
1435
 
1436
		#取得 R 的執行結果
1436
		#取得 R 的執行結果
1437
		$result["lineArray"]=$executeRresult["lineArray"];
1437
		$result["lineArray"]=$executeRresult["lineArray"];
1438
		
1438
 
1439
		#取得 R 的執行結果行數
1439
		#取得 R 的執行結果行數
1440
		$result["lineCount"]=$executeRresult["lineCount"];
1440
		$result["lineCount"]=$executeRresult["lineCount"];
1441
		
1441
 
1442
		#取得圖表的位置
1442
		#取得圖表的位置
1443
		$result["img"]=$conf["trainDataReportImgPositionAndName"];
1443
		$result["img"]=$conf["trainDataReportImgPositionAndName"];
1444
		
1444
 
1445
		#放置圖表的語法
1445
		#放置圖表的語法
1446
		#函數說明:
1446
		#函數說明:
1447
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
1447
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
1448
		#回傳結果:
1448
		#回傳結果:
1449
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1449
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1450
		#$result["error"],錯誤訊息
1450
		#$result["error"],錯誤訊息
1451
		#$result["content"],圖片的連結資訊
1451
		#$result["content"],圖片的連結資訊
1452
		#$result["function"],當前執行的函數名稱 
1452
		#$result["function"],當前執行的函數名稱
1453
		#必填參數:
1453
		#必填參數:
1454
		#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
1454
		#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
1455
		$conf["img::data"]["imgPosition"]=$conf["trainDataReportImgPositionAndName"];
1455
		$conf["img::data"]["imgPosition"]=$conf["trainDataReportImgPositionAndName"];
1456
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1456
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1457
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
1457
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
Line 1471... Line 1471...
1471
		#參考資料:
1471
		#參考資料:
1472
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
1472
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
1473
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
1473
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
1474
		$data=img::data($conf["img::data"]);
1474
		$data=img::data($conf["img::data"]);
1475
		unset($conf["img::data"]);
1475
		unset($conf["img::data"]);
1476
		
1476
 
1477
		#如果顯示圖片失敗
1477
		#如果顯示圖片失敗
1478
		if($data["status"]=="false"){
1478
		if($data["status"]=="false"){
1479
			
1479
 
1480
			#設置執行失敗
1480
			#設置執行失敗
1481
			$result["status"]="false";
1481
			$result["status"]="false";
1482
			
1482
 
1483
			#設置執行錯誤訊息
1483
			#設置執行錯誤訊息
1484
			$result["error"]=$data;
1484
			$result["error"]=$data;
1485
			
1485
 
1486
			#回傳結果
1486
			#回傳結果
1487
			return $result;
1487
			return $result;
1488
			
1488
 
1489
			}#if end
1489
			}#if end
1490
			
1490
 
1491
		#放置圖表的語法
1491
		#放置圖表的語法
1492
		$result["content"]=$data["content"];
1492
		$result["content"]=$data["content"];
1493
		
1493
 
1494
		#執行到這邊代表執行正常
1494
		#執行到這邊代表執行正常
1495
		$result["status"]="true";
1495
		$result["status"]="true";
1496
		
1496
 
1497
		#回傳結果
1497
		#回傳結果
1498
		return $result;
1498
		return $result;
1499
		
1499
 
1500
		}#function DecisionTreeWithPackageParty end
1500
		}#function DecisionTreeWithPackageParty end
1501
		
1501
 
1502
	/*
1502
	/*
1503
	#函式說明:
1503
	#函式說明:
1504
	#依據樣本內容進行選項內容次數的統計
1504
	#依據樣本內容進行選項內容次數的統計
1505
	#回傳結果:
1505
	#回傳結果:
1506
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常.
1506
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常.
Line 1522... Line 1522...
1522
	#R的敘述統計=>http://netstat.stat.tku.edu.tw/desc.php
1522
	#R的敘述統計=>http://netstat.stat.tku.edu.tw/desc.php
1523
	#備註:
1523
	#備註:
1524
	#目前欄位中文名稱讀出來會變成亂碼,因此建議交由php讀檔時就取得其欄位中文名稱
1524
	#目前欄位中文名稱讀出來會變成亂碼,因此建議交由php讀檔時就取得其欄位中文名稱
1525
	*/
1525
	*/
1526
	public static function describedStatistic(&$conf){
1526
	public static function describedStatistic(&$conf){
1527
		
1527
 
1528
		#初始化要回傳的結果
1528
		#初始化要回傳的結果
1529
		$result=array();
1529
		$result=array();
1530
		
1530
 
1531
		#取得當前執行函數名稱
1531
		#取得當前執行函數名稱
1532
		$result["function"]=__FUNCTION__;
1532
		$result["function"]=__FUNCTION__;
1533
		
1533
 
1534
		#如果 $conf 不為陣列
1534
		#如果 $conf 不為陣列
1535
		if(gettype($conf)!="array"){
1535
		if(gettype($conf)!="array"){
1536
			
1536
 
1537
			#設置執行失敗
1537
			#設置執行失敗
1538
			$result["status"]="false";
1538
			$result["status"]="false";
1539
			
1539
 
1540
			#設置執行錯誤訊息
1540
			#設置執行錯誤訊息
1541
			$result["error"][]="\$conf變數須為陣列形態";
1541
			$result["error"][]="\$conf變數須為陣列形態";
1542
 
1542
 
1543
			#如果傳入的參數為 null
1543
			#如果傳入的參數為 null
1544
			if($conf==null){
1544
			if($conf==null){
1545
				
1545
 
1546
				#設置執行錯誤訊息
1546
				#設置執行錯誤訊息
1547
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1547
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1548
				
1548
 
1549
				}#if end
1549
				}#if end
1550
 
1550
 
1551
			#回傳結果
1551
			#回傳結果
1552
			return $result;
1552
			return $result;
1553
			
1553
 
1554
			}#if end
1554
			}#if end
1555
		
1555
 
1556
		#檢查參數
1556
		#檢查參數
1557
		#涵式說明:
1557
		#涵式說明:
1558
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1558
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
1559
		#回傳的結果:
1559
		#回傳的結果:
1560
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1560
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1566... Line 1566...
1566
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1566
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1567
		#必填寫的參數:
1567
		#必填寫的參數:
1568
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
1568
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
1569
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFileAddress","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1569
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFileAddress","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
1570
		#可以省略的參數:
1570
		#可以省略的參數:
1571
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
1571
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
1572
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1572
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
1573
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
1573
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
1574
		unset($conf["variableCheck.isexistMulti"]);			
1574
		unset($conf["variableCheck.isexistMulti"]);
1575
		
1575
 
1576
		#如果檢查失敗
1576
		#如果檢查失敗
1577
		if($checkResult["status"]=="false"){
1577
		if($checkResult["status"]=="false"){
1578
			
1578
 
1579
			#設置執行失敗
1579
			#設置執行失敗
1580
			$result["status"]="false";
1580
			$result["status"]="false";
1581
			
1581
 
1582
			#設置執行錯誤
1582
			#設置執行錯誤
1583
			$result["error"]=$checkResult;
1583
			$result["error"]=$checkResult;
1584
			
1584
 
1585
			#回傳結果
1585
			#回傳結果
1586
			return $result;
1586
			return $result;
1587
			
1587
 
1588
			}#if end
1588
			}#if end
1589
			
1589
 
1590
		#如果檢查失敗
1590
		#如果檢查失敗
1591
		if($checkResult["passed"]=="false"){
1591
		if($checkResult["passed"]=="false"){
1592
			
1592
 
1593
			#設置執行失敗
1593
			#設置執行失敗
1594
			$result["status"]="false";
1594
			$result["status"]="false";
1595
			
1595
 
1596
			#設置執行錯誤
1596
			#設置執行錯誤
1597
			$result["error"]=$checkResult;
1597
			$result["error"]=$checkResult;
1598
			
1598
 
1599
			#回傳結果
1599
			#回傳結果
1600
			return $result;
1600
			return $result;
1601
			
1601
 
1602
			}#if end
1602
			}#if end
1603
		
1603
 
1604
		#檢查csv檔案是否存在
1604
		#檢查csv檔案是否存在
1605
		#涵式說明:檢查多個檔案與資料夾是否存在.
1605
		#涵式說明:檢查多個檔案與資料夾是否存在.
1606
		#回傳的結果:
1606
		#回傳的結果:
1607
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
1607
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
1608
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1608
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
Line 1613... Line 1613...
1613
		#參考資料來源:
1613
		#參考資料來源:
1614
		#http://php.net/manual/en/function.file-exists.php
1614
		#http://php.net/manual/en/function.file-exists.php
1615
		#http://php.net/manual/en/control-structures.foreach.php
1615
		#http://php.net/manual/en/control-structures.foreach.php
1616
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
1616
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
1617
		unset($conf["fileAccess.checkMultiFileExist"]);
1617
		unset($conf["fileAccess.checkMultiFileExist"]);
1618
		
1618
 
1619
		#如果檢查失敗
1619
		#如果檢查失敗
1620
		if($checkResult["status"]=="false"){
1620
		if($checkResult["status"]=="false"){
1621
			
1621
 
1622
			#設置執行失敗
1622
			#設置執行失敗
1623
			$result["status"]="false";
1623
			$result["status"]="false";
1624
			
1624
 
1625
			#設置執行錯誤
1625
			#設置執行錯誤
1626
			$result["error"]=$checkResult;
1626
			$result["error"]=$checkResult;
1627
			
1627
 
1628
			#回傳結果
1628
			#回傳結果
1629
			return $result;
1629
			return $result;
1630
			
1630
 
1631
			}#if end
1631
			}#if end
1632
		
1632
 
1633
		#如果檢查失敗
1633
		#如果檢查失敗
1634
		if($checkResult["varExist"][0]=="false"){
1634
		if($checkResult["varExist"][0]=="false"){
1635
			
1635
 
1636
			#設置執行失敗
1636
			#設置執行失敗
1637
			$result["status"]="false";
1637
			$result["status"]="false";
1638
			
1638
 
1639
			#設置執行錯誤
1639
			#設置執行錯誤
1640
			$result["error"]=$checkResult;
1640
			$result["error"]=$checkResult;
1641
			
1641
 
1642
			#回傳結果
1642
			#回傳結果
1643
			return $result;
1643
			return $result;
1644
			
1644
 
1645
			}#if end
1645
			}#if end
1646
			
1646
 
1647
		#讀取csv檔案的內容
1647
		#讀取csv檔案的內容
1648
		#回傳得結果:
1648
		#回傳得結果:
1649
		#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
1649
		#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
1650
		#$result["error"],錯誤訊息陣列.
1650
		#$result["error"],錯誤訊息陣列.
1651
		#$result["function"],當前執行的函數名稱.
1651
		#$result["function"],當前執行的函數名稱.
Line 1664... Line 1664...
1664
		#http://www.php.net/manual/en/function.str-split.php
1664
		#http://www.php.net/manual/en/function.str-split.php
1665
		#參考資料來源
1665
		#參考資料來源
1666
		#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)
1666
		#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)
1667
		$readCsvResult=csv::loadCsvFile($conf["csv.loadCsvFile"]);
1667
		$readCsvResult=csv::loadCsvFile($conf["csv.loadCsvFile"]);
1668
		unset($conf["csv.loadCsvFile"]);
1668
		unset($conf["csv.loadCsvFile"]);
1669
		
1669
 
1670
		#var_dump($readCsvResult);
1670
		#var_dump($readCsvResult);
1671
		
1671
 
1672
		#如果 $readCsvResult["status"] 等於 "false"
1672
		#如果 $readCsvResult["status"] 等於 "false"
1673
		if($readCsvResult["status"]=="false"){
1673
		if($readCsvResult["status"]=="false"){
1674
			
1674
 
1675
			#設置執行失敗
1675
			#設置執行失敗
1676
			$result["status"]="false";
1676
			$result["status"]="false";
1677
			
1677
 
1678
			#設置執行錯誤
1678
			#設置執行錯誤
1679
			$result["error"]=$readCsvResult;
1679
			$result["error"]=$readCsvResult;
1680
			
1680
 
1681
			#回傳結果
1681
			#回傳結果
1682
			return $result;
1682
			return $result;
1683
			
1683
 
1684
			}#if end
1684
			}#if end
1685
			
1685
 
1686
		#宣告儲存csv檔標題欄名稱的陣列
1686
		#宣告儲存csv檔標題欄名稱的陣列
1687
		$columnNameList=array();
1687
		$columnNameList=array();
1688
		
1688
 
1689
		#迴圈從i等等於1到不小於count($readCsvResult["csvFileContent"][0])為止
1689
		#迴圈從i等等於1到不小於count($readCsvResult["csvFileContent"][0])為止
1690
		#亦即第二欄到最後一欄
1690
		#亦即第二欄到最後一欄
1691
		for($i=1;$i<count($readCsvResult["csvFileContent"][0]);$i++){
1691
		for($i=1;$i<count($readCsvResult["csvFileContent"][0]);$i++){
1692
			
1692
 
1693
			#紀錄第$i+1欄的欄位名稱
1693
			#紀錄第$i+1欄的欄位名稱
1694
			$columnNameList[]=$readCsvResult["csvFileContent"][0][$i];
1694
			$columnNameList[]=$readCsvResult["csvFileContent"][0][$i];
1695
			
1695
 
1696
			}#for end
1696
			}#for end
1697
		
1697
 
1698
		#初始化要寫入到R腳本的逐行內容
1698
		#初始化要寫入到R腳本的逐行內容
1699
		$dataToWrite=array();
1699
		$dataToWrite=array();
1700
		
1700
 
1701
		#讀取 $conf["csvFileAddress"] 檔案,進行敘述性統計
1701
		#讀取 $conf["csvFileAddress"] 檔案,進行敘述性統計
1702
		$dataToWrite[]="data=read.csv(file=\"".$conf["csvFileAddress"]."\",header=TRUE)";
1702
		$dataToWrite[]="data=read.csv(file=\"".$conf["csvFileAddress"]."\",header=TRUE)";
1703
		
1703
 
1704
		#取得csv檔有幾欄內容
1704
		#取得csv檔有幾欄內容
1705
		$dataToWrite[]="columnCount=dim(data)[2]";
1705
		$dataToWrite[]="columnCount=dim(data)[2]";
1706
		
1706
 
1707
		#迴圈開始,執行第2欄到第 columnCount 欄
1707
		#迴圈開始,執行第2欄到第 columnCount 欄
1708
		$dataToWrite[]="for(i in 2:columnCount){";
1708
		$dataToWrite[]="for(i in 2:columnCount){";
1709
		
1709
 
1710
		#迴圈內容
1710
		#迴圈內容
1711
		#對第i欄進行敘述行統計
1711
		#對第i欄進行敘述行統計
1712
		#印出來
1712
		#印出來
1713
		$dataToWrite[]="write.table(table(data[i]),sep=\",\")";
1713
		$dataToWrite[]="write.table(table(data[i]),sep=\",\")";
1714
		
1714
 
1715
		#迴圈結束
1715
		#迴圈結束
1716
		$dataToWrite[]="}";
1716
		$dataToWrite[]="}";
1717
		
1717
 
1718
		#涵式說明:
1718
		#涵式說明:
1719
		#建立R檔案
1719
		#建立R檔案
1720
		#回傳的結果:
1720
		#回傳的結果:
1721
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
1721
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
1722
		#$result["error"],錯誤訊息陣列.
1722
		#$result["error"],錯誤訊息陣列.
Line 1726... Line 1726...
1726
		$conf["R.writeRfile"]["textToWrite"]=$dataToWrite;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
1726
		$conf["R.writeRfile"]["textToWrite"]=$dataToWrite;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
1727
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1727
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1728
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
1728
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
1729
		$createRscriptResult=R::writeRfile($conf["R.writeRfile"]);
1729
		$createRscriptResult=R::writeRfile($conf["R.writeRfile"]);
1730
		unset($conf["R.writeRfile"]);
1730
		unset($conf["R.writeRfile"]);
1731
		
1731
 
1732
		#如果建立 R腳本 失敗
1732
		#如果建立 R腳本 失敗
1733
		if($createRscriptResult["status"]=="false"){
1733
		if($createRscriptResult["status"]=="false"){
1734
			
1734
 
1735
			#設置執行失敗
1735
			#設置執行失敗
1736
			$result["status"]="false";
1736
			$result["status"]="false";
1737
			
1737
 
1738
			#設置執行錯誤
1738
			#設置執行錯誤
1739
			$result["error"]=$createRscriptResult;
1739
			$result["error"]=$createRscriptResult;
1740
			
1740
 
1741
			#回傳結果
1741
			#回傳結果
1742
			return $result;
1742
			return $result;
1743
			
1743
 
1744
			}#if end
1744
			}#if end
1745
			
1745
 
1746
		#函式說明:
1746
		#函式說明:
1747
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
1747
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
1748
		#回傳的結果:
1748
		#回傳的結果:
1749
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1749
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1750
		#$result["errror"],錯誤訊息陣列
1750
		#$result["errror"],錯誤訊息陣列
Line 1758... Line 1758...
1758
		#可省略的參數:
1758
		#可省略的參數:
1759
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
1759
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
1760
		#$conf["R.executeR"]["disbaleOptimal"]="true";
1760
		#$conf["R.executeR"]["disbaleOptimal"]="true";
1761
		$excuteRscriptResult=R::executeR($conf["R.executeR"]);
1761
		$excuteRscriptResult=R::executeR($conf["R.executeR"]);
1762
		unset($conf["R.executeR"]);
1762
		unset($conf["R.executeR"]);
1763
		
1763
 
1764
		#如果執行 R腳本 失敗
1764
		#如果執行 R腳本 失敗
1765
		if($excuteRscriptResult["status"]=="false"){
1765
		if($excuteRscriptResult["status"]=="false"){
1766
			
1766
 
1767
			#設置執行失敗
1767
			#設置執行失敗
1768
			$result["status"]="false";
1768
			$result["status"]="false";
1769
			
1769
 
1770
			#設置執行錯誤
1770
			#設置執行錯誤
1771
			$result["error"]=$excuteRscriptResult;
1771
			$result["error"]=$excuteRscriptResult;
1772
			
1772
 
1773
			#回傳結果
1773
			#回傳結果
1774
			return $result;
1774
			return $result;
1775
			
1775
 
1776
			}#if end
1776
			}#if end
1777
		
1777
 
1778
		#debug
1778
		#debug
1779
		#var_dump($excuteRscriptResult);
1779
		#var_dump($excuteRscriptResult);
1780
			
1780
 
1781
		#宣告識別要開始抓取內容的旗標變數
1781
		#宣告識別要開始抓取內容的旗標變數
1782
		$columnStatisticData=array();
1782
		$columnStatisticData=array();
1783
			
1783
 
1784
		#初始化欄位計數
1784
		#初始化欄位計數
1785
		$columnCount=-1;
1785
		$columnCount=-1;
1786
		
1786
 
1787
		#初始化選項計數
1787
		#初始化選項計數
1788
		$optionCount=1;	
1788
		$optionCount=1;
1789
		
1789
 
1790
		#解析從R取得的結果
1790
		#解析從R取得的結果
1791
		for($i=5;$i<count($excuteRscriptResult["lineArray"]);$i++){
1791
		for($i=5;$i<count($excuteRscriptResult["lineArray"]);$i++){
1792
			
1792
 
1793
			#如果讀到 ""Var1","Freq""
1793
			#如果讀到 ""Var1","Freq""
1794
			if($excuteRscriptResult["lineArray"][$i]=="\"Var1\",\"Freq\""){
1794
			if($excuteRscriptResult["lineArray"][$i]=="\"Var1\",\"Freq\""){
1795
				
1795
 
1796
				#欄位計數加1
1796
				#欄位計數加1
1797
				$columnCount++;
1797
				$columnCount++;
1798
				
1798
 
1799
				#初始化選項計數
1799
				#初始化選項計數
1800
				$optionCount=1;
1800
				$optionCount=1;
1801
				
1801
 
1802
				#跳過該次迴圈
1802
				#跳過該次迴圈
1803
				continue;
1803
				continue;
1804
				
1804
 
1805
				}#if end
1805
				}#if end
1806
				
1806
 
1807
			#如果讀到 "Freq"
1807
			#如果讀到 "Freq"
1808
			if($excuteRscriptResult["lineArray"][$i]=="\"Freq\""){
1808
			if($excuteRscriptResult["lineArray"][$i]=="\"Freq\""){
1809
				
1809
 
1810
				#欄位計數加1
1810
				#欄位計數加1
1811
				$columnCount++;
1811
				$columnCount++;
1812
				
1812
 
1813
				#初始化選項計數
1813
				#初始化選項計數
1814
				$optionCount=1;
1814
				$optionCount=1;
1815
				
1815
 
1816
				#跳過該次迴圈
1816
				#跳過該次迴圈
1817
				continue;
1817
				continue;
1818
				
1818
 
1819
				}#if end
1819
				}#if end
1820
				
1820
 
1821
			#取得題目
1821
			#取得題目
1822
			$columnStatisticData[$columnCount]["title"]=$columnNameList[$columnCount];
1822
			$columnStatisticData[$columnCount]["title"]=$columnNameList[$columnCount];
1823
			
1823
 
1824
			#取得要解析的字串	
1824
			#取得要解析的字串
1825
			$dataNeedToFilted=$excuteRscriptResult["lineArray"][$i];
1825
			$dataNeedToFilted=$excuteRscriptResult["lineArray"][$i];
1826
			
1826
 
1827
			#debug
1827
			#debug
1828
			#var_dump($dataNeedToFilted);
1828
			#var_dump($dataNeedToFilted);
1829
			
1829
 
1830
			#涵式說明:
1830
			#涵式說明:
1831
			#將固定格式的字串分開,並回傳分開的結果。
1831
			#將固定格式的字串分開,並回傳分開的結果。
1832
			#回傳的參數:
1832
			#回傳的參數:
1833
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1833
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1834
			#$result["error"],錯誤訊息陣列
1834
			#$result["error"],錯誤訊息陣列
Line 1838... Line 1838...
1838
			#必填的參數:
1838
			#必填的參數:
1839
			$conf["stringProcess.spiltString"]["stringIn"]=$dataNeedToFilted;#要處理的字串。
1839
			$conf["stringProcess.spiltString"]["stringIn"]=$dataNeedToFilted;#要處理的字串。
1840
			$conf["stringProcess.spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割
1840
			$conf["stringProcess.spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割
1841
			$spiltedStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
1841
			$spiltedStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
1842
			unset($conf["stringProcess.spiltString"]);
1842
			unset($conf["stringProcess.spiltString"]);
1843
			
1843
 
1844
			#debug
1844
			#debug
1845
			#var_dump($spiltedStr);
1845
			#var_dump($spiltedStr);
1846
			
1846
 
1847
			#若 $spiltedStr["status"] 等於 "false"
1847
			#若 $spiltedStr["status"] 等於 "false"
1848
			if($spiltedStr["status"]=="false"){
1848
			if($spiltedStr["status"]=="false"){
1849
				
1849
 
1850
				#設置執行失敗
1850
				#設置執行失敗
1851
				$result["status"]="false";
1851
				$result["status"]="false";
1852
				
1852
 
1853
				#設置執行錯誤
1853
				#設置執行錯誤
1854
				$result["error"]=$spiltedStr;
1854
				$result["error"]=$spiltedStr;
1855
				
1855
 
1856
				#回傳結果
1856
				#回傳結果
1857
				return $result;
1857
				return $result;
1858
				
1858
 
1859
				}#if end
1859
				}#if end
1860
				
1860
 
1861
			#如果 $spiltedStr["dataCounts"]<=1
1861
			#如果 $spiltedStr["dataCounts"]<=1
1862
			if($spiltedStr["dataCounts"]<=1){
1862
			if($spiltedStr["dataCounts"]<=1){
1863
				
1863
 
1864
				#欄位計數加1
1864
				#欄位計數加1
1865
				#$columnCount++;
1865
				#$columnCount++;
1866
				
1866
 
1867
				#跳過該次迴圈
1867
				#跳過該次迴圈
1868
				continue;
1868
				continue;
1869
				
1869
 
1870
				}#if end
1870
				}#if end
1871
			
1871
 
1872
			#處理選項名稱不必要的內容
1872
			#處理選項名稱不必要的內容
1873
			#涵式說明:
1873
			#涵式說明:
1874
			#處理字串避免網頁出錯
1874
			#處理字串避免網頁出錯
1875
			#回傳的結果:
1875
			#回傳的結果:
1876
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1876
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1884... Line 1884...
1884
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
1884
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
1885
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1885
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1886
			$conf["stringProcess.correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1886
			$conf["stringProcess.correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1887
			$spiltedStr["dataArray"][1]=stringProcess::correctCharacter($conf["stringProcess.correctCharacter"]);
1887
			$spiltedStr["dataArray"][1]=stringProcess::correctCharacter($conf["stringProcess.correctCharacter"]);
1888
			unset($conf["stringProcess.correctCharacter"]);
1888
			unset($conf["stringProcess.correctCharacter"]);
1889
		
1889
 
1890
			#如果修正內容失敗
1890
			#如果修正內容失敗
1891
			if($spiltedStr["dataArray"][1]["status"]=="false"){
1891
			if($spiltedStr["dataArray"][1]["status"]=="false"){
1892
				
1892
 
1893
				#設置執行失敗
1893
				#設置執行失敗
1894
				$result["status"]="false";
1894
				$result["status"]="false";
1895
				
1895
 
1896
				#設置執行錯誤
1896
				#設置執行錯誤
1897
				$result["error"]=$spiltedStr["dataArray"][1];
1897
				$result["error"]=$spiltedStr["dataArray"][1];
1898
				
1898
 
1899
				#回傳結果
1899
				#回傳結果
1900
				return $result;
1900
				return $result;
1901
				
1901
 
1902
				}#if end
1902
				}#if end
1903
		
1903
 
1904
			#如果選項爲 $spiltedStr["dataArray"][1]["content"] 等於 ""
1904
			#如果選項爲 $spiltedStr["dataArray"][1]["content"] 等於 ""
1905
			if($spiltedStr["dataArray"][1]["content"]==""){
1905
			if($spiltedStr["dataArray"][1]["content"]==""){
1906
				
1906
 
1907
				#設爲空值
1907
				#設爲空值
1908
				$spiltedStr["dataArray"][1]["content"]="空值";
1908
				$spiltedStr["dataArray"][1]["content"]="空值";
1909
				
1909
 
1910
				}#if end
1910
				}#if end
1911
		
1911
 
1912
			#處理選項名稱不必要的內容
1912
			#處理選項名稱不必要的內容
1913
			#涵式說明:
1913
			#涵式說明:
1914
			#處理字串避免網頁出錯
1914
			#處理字串避免網頁出錯
1915
			#回傳的結果:
1915
			#回傳的結果:
1916
			#$result,爲處理好的字串。
1916
			#$result,爲處理好的字串。
Line 1921... Line 1921...
1921
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
1921
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
1922
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1922
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1923
			$conf["stringProcess.correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1923
			$conf["stringProcess.correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1924
			$spiltedStr["dataArray"][2]=stringProcess::correctCharacter($conf["stringProcess.correctCharacter"]);
1924
			$spiltedStr["dataArray"][2]=stringProcess::correctCharacter($conf["stringProcess.correctCharacter"]);
1925
			unset($conf["stringProcess.correctCharacter"]);
1925
			unset($conf["stringProcess.correctCharacter"]);
1926
		
1926
 
1927
			#如果修正內容失敗
1927
			#如果修正內容失敗
1928
			if($spiltedStr["dataArray"][2]["status"]=="false"){
1928
			if($spiltedStr["dataArray"][2]["status"]=="false"){
1929
				
1929
 
1930
				#設置執行失敗
1930
				#設置執行失敗
1931
				$result["status"]="false";
1931
				$result["status"]="false";
1932
				
1932
 
1933
				#設置執行錯誤
1933
				#設置執行錯誤
1934
				$result["error"]=$spiltedStr["dataArray"][2];
1934
				$result["error"]=$spiltedStr["dataArray"][2];
1935
				
1935
 
1936
				#回傳結果
1936
				#回傳結果
1937
				return $result;
1937
				return $result;
1938
				
1938
 
1939
				}#if end
1939
				}#if end
1940
				
1940
 
1941
			#以整數key紀錄選項名稱
1941
			#以整數key紀錄選項名稱
1942
			$columnStatisticData[$columnCount][$optionCount]["optionValue"]=$spiltedStr["dataArray"][1]["content"];
1942
			$columnStatisticData[$columnCount][$optionCount]["optionValue"]=$spiltedStr["dataArray"][1]["content"];
1943
			
1943
 
1944
			#以整數key紀錄選項頻率
1944
			#以整數key紀錄選項頻率
1945
			$columnStatisticData[$columnCount][$optionCount]["optionCount"]=$spiltedStr["dataArray"][2]["content"];
1945
			$columnStatisticData[$columnCount][$optionCount]["optionCount"]=$spiltedStr["dataArray"][2]["content"];
1946
			
1946
 
1947
			#選項計數加1
1947
			#選項計數加1
1948
			$optionCount++;
1948
			$optionCount++;
1949
			
1949
 
1950
			#debug
1950
			#debug
1951
			#var_dump($columnStatisticData[$columnCount]);
1951
			#var_dump($columnStatisticData[$columnCount]);
1952
			
1952
 
1953
			#排序含有選項名稱與頻率的二維陣列
1953
			#排序含有選項名稱與頻率的二維陣列
1954
			#函數說明:
1954
			#函數說明:
1955
			#排序含有多資訊的二維陣列
1955
			#排序含有多資訊的二維陣列
1956
			#回傳結果:
1956
			#回傳結果:
1957
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1957
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1966... Line 1966...
1966
			#可省參數:
1966
			#可省參數:
1967
			#$conf["arrays.arrangeTwoDmensionArray"]["type"],字串,排序的類型,"asc"代表遞增,"desc"代表遞減,預設為"desc"。
1967
			#$conf["arrays.arrangeTwoDmensionArray"]["type"],字串,排序的類型,"asc"代表遞增,"desc"代表遞減,預設為"desc"。
1968
			$conf["arrays.arrangeTwoDmensionArray"]["type"]="desc";
1968
			$conf["arrays.arrangeTwoDmensionArray"]["type"]="desc";
1969
			$arrangedResult=arrays::arrangeTwoDmensionArray($conf["arrays.arrangeTwoDmensionArray"]);
1969
			$arrangedResult=arrays::arrangeTwoDmensionArray($conf["arrays.arrangeTwoDmensionArray"]);
1970
			unset($conf["arrays.arrangeTwoDmensionArray"]);
1970
			unset($conf["arrays.arrangeTwoDmensionArray"]);
1971
			
1971
 
1972
			#如果排序失敗
1972
			#如果排序失敗
1973
			if($arrangedResult["status"]=="false"){
1973
			if($arrangedResult["status"]=="false"){
1974
				
1974
 
1975
				#設置執行失敗
1975
				#設置執行失敗
1976
				$result["status"]="false";
1976
				$result["status"]="false";
1977
				
1977
 
1978
				#設置執行錯誤
1978
				#設置執行錯誤
1979
				$result["error"]=$arrangedResult;
1979
				$result["error"]=$arrangedResult;
1980
				
1980
 
1981
				#回傳結果
1981
				#回傳結果
1982
				return $result;
1982
				return $result;
1983
				
1983
 
1984
				}#if end
1984
				}#if end
1985
				 
1985
 
1986
			}#for end
1986
			}#for end
1987
			
1987
 
1988
		#debug
1988
		#debug
1989
		#var_dump(count($columnStatisticData));	
1989
		#var_dump(count($columnStatisticData));
1990
			
1990
 
1991
		#計算每個題目各選項所佔的百分比	
1991
		#計算每個題目各選項所佔的百分比
1992
		for($i=0;$i<count($columnStatisticData);$i++){
1992
		for($i=0;$i<count($columnStatisticData);$i++){
1993
			
1993
 
1994
			#初始化總共的選項填達次數
1994
			#初始化總共的選項填達次數
1995
			$total=0;
1995
			$total=0;
1996
			
1996
 
1997
			#如果該題有填答的記錄
1997
			#如果該題有填答的記錄
1998
			if(isset($columnStatisticData[$i])){
1998
			if(isset($columnStatisticData[$i])){
1999
			
1999
 
2000
				#有幾個選項就執行幾次
2000
				#有幾個選項就執行幾次
2001
				#-1是因爲title的關係
2001
				#-1是因爲title的關係
2002
				for($j=1;$j<=count($columnStatisticData[$i])-1;$j++){
2002
				for($j=1;$j<=count($columnStatisticData[$i])-1;$j++){
2003
					
2003
 
2004
					#如果 $columnStatisticData[$i][$j]["optionValue"] 不等於 "空值"
2004
					#如果 $columnStatisticData[$i][$j]["optionValue"] 不等於 "空值"
2005
					if($columnStatisticData[$i][$j]["optionValue"]!="空值"){
2005
					if($columnStatisticData[$i][$j]["optionValue"]!="空值"){
2006
					
2006
 
2007
						#加總填達次數
2007
						#加總填達次數
2008
						$total=$total+$columnStatisticData[$i][$j]["optionCount"];
2008
						$total=$total+$columnStatisticData[$i][$j]["optionCount"];
2009
					
2009
 
2010
						}#if end
2010
						}#if end
2011
					
2011
 
2012
					}#for end
2012
					}#for end
2013
				
2013
 
2014
				#有幾個選項就執行幾次
2014
				#有幾個選項就執行幾次
2015
				for($j=1;$j<count($columnStatisticData[$i]);$j++){
2015
				for($j=1;$j<count($columnStatisticData[$i]);$j++){
2016
					
2016
 
2017
					#如果 $columnStatisticData[$i][$j]["optionValue"] 不等於 "空值"
2017
					#如果 $columnStatisticData[$i][$j]["optionValue"] 不等於 "空值"
2018
					if($columnStatisticData[$i][$j]["optionValue"]!="空值"){
2018
					if($columnStatisticData[$i][$j]["optionValue"]!="空值"){
2019
					
2019
 
2020
						#取得選項的填達比率
2020
						#取得選項的填達比率
2021
						$columnStatisticData[$i][$j]["optionPercent"]=$columnStatisticData[$i][$j]["optionCount"]/$total;
2021
						$columnStatisticData[$i][$j]["optionPercent"]=$columnStatisticData[$i][$j]["optionCount"]/$total;
2022
					
2022
 
2023
						}#if end
2023
						}#if end
2024
					
2024
 
2025
					}#for end
2025
					}#for end
2026
				
2026
 
2027
				}#if end
2027
				}#if end
2028
				
2028
 
2029
			}#for end
2029
			}#for end
2030
			
2030
 
2031
		#設置要回傳的內容
2031
		#設置要回傳的內容
2032
		$result["content"]=$columnStatisticData;
2032
		$result["content"]=$columnStatisticData;
2033
		
2033
 
2034
		#取得題項數目的計數
2034
		#取得題項數目的計數
2035
		$result["content"]["questCount"]=count($result["content"]);
2035
		$result["content"]["questCount"]=count($result["content"]);
2036
		
2036
 
2037
		#設置執行成功
2037
		#設置執行成功
2038
		$reuslt["status"]="true";
2038
		$reuslt["status"]="true";
2039
		
2039
 
2040
		#回傳結果
2040
		#回傳結果
2041
		return $result;
2041
		return $result;
2042
		
2042
 
2043
		}#function decriptionStatistic end
2043
		}#function decriptionStatistic end
2044
	
2044
 
2045
	/*
2045
	/*
2046
	#函式說明:
2046
	#函式說明:
2047
	#繪製圓餅圖
2047
	#繪製圓餅圖
2048
	#回傳結果:
2048
	#回傳結果:
2049
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
2049
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
Line 2067... Line 2067...
2067
	#無.
2067
	#無.
2068
	#備註:
2068
	#備註:
2069
	#無
2069
	#無
2070
	*/
2070
	*/
2071
	public static function createPie(&$conf){
2071
	public static function createPie(&$conf){
2072
		
2072
 
2073
		#初始化要回傳的內容
2073
		#初始化要回傳的內容
2074
		$result=array();
2074
		$result=array();
2075
		
2075
 
2076
		#取得當前函數名稱
2076
		#取得當前函數名稱
2077
		$result["function"]=__FUNCTION__;
2077
		$result["function"]=__FUNCTION__;
2078
		
2078
 
2079
		#如果 $conf 不為陣列
2079
		#如果 $conf 不為陣列
2080
		if(gettype($conf)!="array"){
2080
		if(gettype($conf)!="array"){
2081
			
2081
 
2082
			#設置執行失敗
2082
			#設置執行失敗
2083
			$result["status"]="false";
2083
			$result["status"]="false";
2084
			
2084
 
2085
			#設置執行錯誤訊息
2085
			#設置執行錯誤訊息
2086
			$result["error"][]="\$conf變數須為陣列形態";
2086
			$result["error"][]="\$conf變數須為陣列形態";
2087
 
2087
 
2088
			#如果傳入的參數為 null
2088
			#如果傳入的參數為 null
2089
			if($conf==null){
2089
			if($conf==null){
2090
				
2090
 
2091
				#設置執行錯誤訊息
2091
				#設置執行錯誤訊息
2092
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2092
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2093
				
2093
 
2094
				}#if end
2094
				}#if end
2095
 
2095
 
2096
			#回傳結果
2096
			#回傳結果
2097
			return $result;
2097
			return $result;
2098
			
2098
 
2099
			}#if end
2099
			}#if end
2100
		
2100
 
2101
		#檢查必填的參數
2101
		#檢查必填的參數
2102
		#涵式說明:
2102
		#涵式說明:
2103
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
2103
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
2104
		#回傳的結果:
2104
		#回傳的結果:
2105
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2105
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2111... Line 2111...
2111
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2111
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2112
		#必填寫的參數:
2112
		#必填寫的參數:
2113
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
2113
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
2114
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","percentArray","labels");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2114
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","percentArray","labels");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2115
		#可以省略的參數:
2115
		#可以省略的參數:
2116
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
2116
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
2117
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2117
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2118
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
2118
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
2119
		unset($conf["variableCheck.isexistMulti"]);
2119
		unset($conf["variableCheck.isexistMulti"]);
2120
		
2120
 
2121
		#如果檢查失敗
2121
		#如果檢查失敗
2122
		if($checkResult["status"]=="false"){
2122
		if($checkResult["status"]=="false"){
2123
			
2123
 
2124
			#設置執行不正常
2124
			#設置執行不正常
2125
			$result["status"]="false";
2125
			$result["status"]="false";
2126
			
2126
 
2127
			#設置執行錯誤訊息
2127
			#設置執行錯誤訊息
2128
			$result["error"]=$checkResult;
2128
			$result["error"]=$checkResult;
2129
			
2129
 
2130
			#回傳結果
2130
			#回傳結果
2131
			return $result;
2131
			return $result;
2132
			
2132
 
2133
			}#if end
2133
			}#if end
2134
			
2134
 
2135
		#如果檢查不通過
2135
		#如果檢查不通過
2136
		if($checkResult["passed"]=="false"){
2136
		if($checkResult["passed"]=="false"){
2137
			
2137
 
2138
			#設置執行不正常
2138
			#設置執行不正常
2139
			$result["status"]="false";
2139
			$result["status"]="false";
2140
			
2140
 
2141
			#設置執行錯誤訊息
2141
			#設置執行錯誤訊息
2142
			$result["error"]=$checkResult;
2142
			$result["error"]=$checkResult;
2143
			
2143
 
2144
			#回傳結果
2144
			#回傳結果
2145
			return $result;
2145
			return $result;
2146
			
2146
 
2147
			}#if end
2147
			}#if end
2148
		
2148
 
2149
		#如果 $_SESSION["username"] 不存在
2149
		#如果 $_SESSION["username"] 不存在
2150
		if(!isset($_SESSION["username"])){
2150
		if(!isset($_SESSION["username"])){
2151
			
2151
 
2152
			#設為"NULL"
2152
			#設為"NULL"
2153
			$_SESSION["username"]="NULL";
2153
			$_SESSION["username"]="NULL";
2154
			
2154
 
2155
			}#if end
2155
			}#if end
2156
		
2156
 
2157
		#檢查可省略的參數
2157
		#檢查可省略的參數
2158
		#函式說明:
2158
		#函式說明:
2159
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
2159
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
2160
		#回傳結果:
2160
		#回傳結果:
2161
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2161
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2175... Line 2175...
2175
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
2175
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
2176
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/pie-".$_SESSION["username"].".png"," ");
2176
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/pie-".$_SESSION["username"].".png"," ");
2177
		#無
2177
		#無
2178
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
2178
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
2179
		unset($conf["variableCheck.checkSkipableVarType"]);
2179
		unset($conf["variableCheck.checkSkipableVarType"]);
2180
		
2180
 
2181
		#如果檢查失敗
2181
		#如果檢查失敗
2182
		if($checkResult["status"]=="false"){
2182
		if($checkResult["status"]=="false"){
2183
			
2183
 
2184
			#設置執行不正常
2184
			#設置執行不正常
2185
			$result["status"]="false";
2185
			$result["status"]="false";
2186
			
2186
 
2187
			#設置執行錯誤訊息
2187
			#設置執行錯誤訊息
2188
			$result["error"]=$checkResult;
2188
			$result["error"]=$checkResult;
2189
			
2189
 
2190
			#回傳結果
2190
			#回傳結果
2191
			return $result;
2191
			return $result;
2192
			
2192
 
2193
			}#if end
2193
			}#if end
2194
			
2194
 
2195
		#如果檢查不通過
2195
		#如果檢查不通過
2196
		if($checkResult["passed"]=="false"){
2196
		if($checkResult["passed"]=="false"){
2197
			
2197
 
2198
			#設置執行不正常
2198
			#設置執行不正常
2199
			$result["status"]="false";
2199
			$result["status"]="false";
2200
			
2200
 
2201
			#設置執行錯誤訊息
2201
			#設置執行錯誤訊息
2202
			$result["error"]=$checkResult;
2202
			$result["error"]=$checkResult;
2203
			
2203
 
2204
			#回傳結果
2204
			#回傳結果
2205
			return $result;
2205
			return $result;
2206
			
2206
 
2207
			}#if end
2207
			}#if end
2208
		
2208
 
2209
		#初始化 percent 字串
2209
		#初始化 percent 字串
2210
		$percent="percent=c(";
2210
		$percent="percent=c(";
2211
		
2211
 
2212
		#初始化 labels 字串
2212
		#初始化 labels 字串
2213
		$labels="labels=c(";
2213
		$labels="labels=c(";
2214
		
2214
 
2215
		#有幾個比例陣列就執行幾次
2215
		#有幾個比例陣列就執行幾次
2216
		for($i=0;$i<count($conf["percentArray"]);$i++){
2216
		for($i=0;$i<count($conf["percentArray"]);$i++){
2217
			
2217
 
2218
			#如果不是最後一個比例
2218
			#如果不是最後一個比例
2219
			if($i!=count($conf["percentArray"])-1){
2219
			if($i!=count($conf["percentArray"])-1){
2220
				
2220
 
2221
				#串接比例,結尾加逗號
2221
				#串接比例,結尾加逗號
2222
				$percent=$percent.$conf["percentArray"][$i].",";
2222
				$percent=$percent.$conf["percentArray"][$i].",";
2223
				
2223
 
2224
				#串接比例名稱,結尾加逗號
2224
				#串接比例名稱,結尾加逗號
2225
				$labels=$labels."\"".$conf["labels"][$i]."\",";
2225
				$labels=$labels."\"".$conf["labels"][$i]."\",";
2226
				
2226
 
2227
				}#if end
2227
				}#if end
2228
				
2228
 
2229
			#反之是最後一個比例
2229
			#反之是最後一個比例
2230
			else{
2230
			else{
2231
				
2231
 
2232
				#串接比例,最後面加上)
2232
				#串接比例,最後面加上)
2233
				$percent=$percent.$conf["percentArray"][$i].")";
2233
				$percent=$percent.$conf["percentArray"][$i].")";
2234
				
2234
 
2235
				#串接比例名稱,最後面加上)
2235
				#串接比例名稱,最後面加上)
2236
				$labels=$labels."\"".$conf["labels"][$i]."\")";
2236
				$labels=$labels."\"".$conf["labels"][$i]."\")";
2237
				
2237
 
2238
				}#else end
2238
				}#else end
2239
			
2239
 
2240
			}#for end
2240
			}#for end
2241
		
2241
 
2242
		#涵式說明:
2242
		#涵式說明:
2243
		#建立R檔案
2243
		#建立R檔案
2244
		#回傳的結果:
2244
		#回傳的結果:
2245
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
2245
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
2246
		#$result["error"],錯誤訊息陣列.
2246
		#$result["error"],錯誤訊息陣列.
Line 2273... Line 2273...
2273
		#$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
2273
		#$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
2274
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2274
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2275
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
2275
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
2276
		$rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
2276
		$rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
2277
		unset($conf["R.writeRfile"]);
2277
		unset($conf["R.writeRfile"]);
2278
		
2278
 
2279
		#如果R腳本檔建立失敗
2279
		#如果R腳本檔建立失敗
2280
		if($rScriptCreateResult["status"]=="false"){
2280
		if($rScriptCreateResult["status"]=="false"){
2281
			
2281
 
2282
			#設置執行不正常
2282
			#設置執行不正常
2283
			$result["status"]="false";
2283
			$result["status"]="false";
2284
			
2284
 
2285
			#設置執行錯誤訊息
2285
			#設置執行錯誤訊息
2286
			$result["error"]=$rScriptCreateResult;
2286
			$result["error"]=$rScriptCreateResult;
2287
			
2287
 
2288
			#回傳結果
2288
			#回傳結果
2289
			return $result;
2289
			return $result;
2290
			
2290
 
2291
			}#if end
2291
			}#if end
2292
			
2292
 
2293
		#執行R腳本
2293
		#執行R腳本
2294
		#函式說明:
2294
		#函式說明:
2295
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
2295
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
2296
		#回傳的結果:
2296
		#回傳的結果:
2297
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2297
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2306... Line 2306...
2306
		#可省略的參數:
2306
		#可省略的參數:
2307
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
2307
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
2308
		#$conf["disbaleOptimal"]="true";
2308
		#$conf["disbaleOptimal"]="true";
2309
		$executeRresult=R::executeR($conf["R.executeR"]);
2309
		$executeRresult=R::executeR($conf["R.executeR"]);
2310
		unset($conf["R.executeR"]);
2310
		unset($conf["R.executeR"]);
2311
		
2311
 
2312
		#如果執行R失敗
2312
		#如果執行R失敗
2313
		if($executeRresult["status"]=="false"){
2313
		if($executeRresult["status"]=="false"){
2314
			
2314
 
2315
			#設置執行不正常
2315
			#設置執行不正常
2316
			$result["status"]="false";
2316
			$result["status"]="false";
2317
			
2317
 
2318
			#設置執行錯誤訊息
2318
			#設置執行錯誤訊息
2319
			$result["error"]=$executeRresult;
2319
			$result["error"]=$executeRresult;
2320
			
2320
 
2321
			#回傳結果
2321
			#回傳結果
2322
			return $result;
2322
			return $result;
2323
			
2323
 
2324
			}#if end
2324
			}#if end
2325
			
2325
 
2326
		#檢查圖片檔案是否有產生
2326
		#檢查圖片檔案是否有產生
2327
		#涵式說明:檢查多個檔案與資料夾是否存在.
2327
		#涵式說明:檢查多個檔案與資料夾是否存在.
2328
		#回傳的結果:
2328
		#回傳的結果:
2329
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2329
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2330
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2330
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
Line 2335... Line 2335...
2335
		#參考資料來源:
2335
		#參考資料來源:
2336
		#http://php.net/manual/en/function.file-exists.php
2336
		#http://php.net/manual/en/function.file-exists.php
2337
		#http://php.net/manual/en/control-structures.foreach.php
2337
		#http://php.net/manual/en/control-structures.foreach.php
2338
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
2338
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
2339
		unset($conf["fileAccess.checkMultiFileExist"]);
2339
		unset($conf["fileAccess.checkMultiFileExist"]);
2340
		
2340
 
2341
		#如果檢查圖片失敗
2341
		#如果檢查圖片失敗
2342
		if($fileCheckResult["status"]=="false"){
2342
		if($fileCheckResult["status"]=="false"){
2343
			
2343
 
2344
			#設置執行不正常
2344
			#設置執行不正常
2345
			$result["status"]="false";
2345
			$result["status"]="false";
2346
			
2346
 
2347
			#設置執行錯誤訊息
2347
			#設置執行錯誤訊息
2348
			$result["error"]=$fileCheckResult;
2348
			$result["error"]=$fileCheckResult;
2349
			
2349
 
2350
			#回傳結果
2350
			#回傳結果
2351
			return $result;
2351
			return $result;
2352
			
2352
 
2353
			}#if end
2353
			}#if end
2354
		
2354
 
2355
		#如果要產生的圖片不存在
2355
		#如果要產生的圖片不存在
2356
		if($fileCheckResult["varExist"][0]=="false"){
2356
		if($fileCheckResult["varExist"][0]=="false"){
2357
			
2357
 
2358
			#設置執行不正常
2358
			#設置執行不正常
2359
			$result["status"]="false";
2359
			$result["status"]="false";
2360
			
2360
 
2361
			#設置執行錯誤訊息
2361
			#設置執行錯誤訊息
2362
			$result["error"]=$fileCheckResult;
2362
			$result["error"]=$fileCheckResult;
2363
			
2363
 
2364
			#回傳結果
2364
			#回傳結果
2365
			return $result;
2365
			return $result;
2366
			
2366
 
2367
			}#if end
2367
			}#if end
2368
			
2368
 
2369
		#取得圖表的位置與名稱
2369
		#取得圖表的位置與名稱
2370
		$result["img"]=$conf["pngFileName"];	
2370
		$result["img"]=$conf["pngFileName"];
2371
			
2371
 
2372
		#函數說明:
2372
		#函數說明:
2373
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
2373
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
2374
		#回傳結果:
2374
		#回傳結果:
2375
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2375
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2376
		#$result["error"],錯誤訊息
2376
		#$result["error"],錯誤訊息
2377
		#$result["content"],圖片的連結資訊
2377
		#$result["content"],圖片的連結資訊
2378
		#$result["function"],當前執行的函數名稱 
2378
		#$result["function"],當前執行的函數名稱
2379
		#必填參數:
2379
		#必填參數:
2380
		#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
2380
		#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
2381
		$conf["img::data"]["imgPosition"]=$conf["pngFileName"];
2381
		$conf["img::data"]["imgPosition"]=$conf["pngFileName"];
2382
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2382
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2383
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
2383
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
Line 2397... Line 2397...
2397
		#參考資料:
2397
		#參考資料:
2398
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
2398
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
2399
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
2399
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
2400
		$data=img::data($conf["img::data"]);
2400
		$data=img::data($conf["img::data"]);
2401
		unset($conf["img::data"]);
2401
		unset($conf["img::data"]);
2402
			
2402
 
2403
		#如果顯示圖片失敗
2403
		#如果顯示圖片失敗
2404
		if($data["status"]=="false"){
2404
		if($data["status"]=="false"){
2405
			
2405
 
2406
			#設置執行失敗
2406
			#設置執行失敗
2407
			$result["status"]="false";
2407
			$result["status"]="false";
2408
			
2408
 
2409
			#設置執行錯誤訊息
2409
			#設置執行錯誤訊息
2410
			$result["error"]=$data;
2410
			$result["error"]=$data;
2411
			
2411
 
2412
			#回傳結果
2412
			#回傳結果
2413
			return $result;
2413
			return $result;
2414
			
2414
 
2415
			}#if end	
2415
			}#if end
2416
						
2416
 
2417
		#取得顯示圖片的語法
2417
		#取得顯示圖片的語法
2418
		$result["content"]=$data["content"];
2418
		$result["content"]=$data["content"];
2419
						
2419
 
2420
		#執行到這邊代表執行正常
2420
		#執行到這邊代表執行正常
2421
		$result["status"]="true";
2421
		$result["status"]="true";
2422
		
2422
 
2423
		#回傳結果
2423
		#回傳結果
2424
		return $result; 
2424
		return $result;
2425
		
2425
 
2426
		}#function createPie end
2426
		}#function createPie end
2427
		
2427
 
2428
	/*
2428
	/*
2429
	#函式說明:
2429
	#函式說明:
2430
	#繪製長條圖
2430
	#繪製長條圖
2431
	#回傳結果:
2431
	#回傳結果:
2432
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
2432
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
Line 2472... Line 2472...
2472
	#無.
2472
	#無.
2473
	#備註:
2473
	#備註:
2474
	#無
2474
	#無
2475
	*/
2475
	*/
2476
	public static function createBarPlot(&$conf){
2476
	public static function createBarPlot(&$conf){
2477
		
2477
 
2478
		#初始化要回傳的內容
2478
		#初始化要回傳的內容
2479
		$result=array();
2479
		$result=array();
2480
		
2480
 
2481
		#取得當前函數名稱
2481
		#取得當前函數名稱
2482
		$result["function"]=__FUNCTION__;
2482
		$result["function"]=__FUNCTION__;
2483
		
2483
 
2484
		#如果 $conf 不為陣列
2484
		#如果 $conf 不為陣列
2485
		if(gettype($conf)!="array"){
2485
		if(gettype($conf)!="array"){
2486
			
2486
 
2487
			#設置執行失敗
2487
			#設置執行失敗
2488
			$result["status"]="false";
2488
			$result["status"]="false";
2489
			
2489
 
2490
			#設置執行錯誤訊息
2490
			#設置執行錯誤訊息
2491
			$result["error"][]="\$conf變數須為陣列形態";
2491
			$result["error"][]="\$conf變數須為陣列形態";
2492
 
2492
 
2493
			#如果傳入的參數為 null
2493
			#如果傳入的參數為 null
2494
			if($conf==null){
2494
			if($conf==null){
2495
				
2495
 
2496
				#設置執行錯誤訊息
2496
				#設置執行錯誤訊息
2497
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2497
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2498
				
2498
 
2499
				}#if end
2499
				}#if end
2500
 
2500
 
2501
			#回傳結果
2501
			#回傳結果
2502
			return $result;
2502
			return $result;
2503
			
2503
 
2504
			}#if end
2504
			}#if end
2505
		
2505
 
2506
		#檢查必填的參數
2506
		#檢查必填的參數
2507
		#涵式說明:
2507
		#涵式說明:
2508
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
2508
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
2509
		#回傳的結果:
2509
		#回傳的結果:
2510
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2510
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2516... Line 2516...
2516
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2516
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2517
		#必填寫的參數:
2517
		#必填寫的參數:
2518
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
2518
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
2519
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","countArray","countNameArray");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2519
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","countArray","countNameArray");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2520
		#可以省略的參數:
2520
		#可以省略的參數:
2521
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
2521
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
2522
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2522
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2523
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
2523
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
2524
		unset($conf["variableCheck.isexistMulti"]);
2524
		unset($conf["variableCheck.isexistMulti"]);
2525
		
2525
 
2526
		#如果檢查失敗
2526
		#如果檢查失敗
2527
		if($checkResult["status"]=="false"){
2527
		if($checkResult["status"]=="false"){
2528
			
2528
 
2529
			#設置執行不正常
2529
			#設置執行不正常
2530
			$result["status"]="false";
2530
			$result["status"]="false";
2531
			
2531
 
2532
			#設置執行錯誤訊息
2532
			#設置執行錯誤訊息
2533
			$result["error"]=$checkResult;
2533
			$result["error"]=$checkResult;
2534
			
2534
 
2535
			#回傳結果
2535
			#回傳結果
2536
			return $result;
2536
			return $result;
2537
			
2537
 
2538
			}#if end
2538
			}#if end
2539
			
2539
 
2540
		#如果檢查不通過
2540
		#如果檢查不通過
2541
		if($checkResult["passed"]=="false"){
2541
		if($checkResult["passed"]=="false"){
2542
			
2542
 
2543
			#設置執行不正常
2543
			#設置執行不正常
2544
			$result["status"]="false";
2544
			$result["status"]="false";
2545
			
2545
 
2546
			#設置執行錯誤訊息
2546
			#設置執行錯誤訊息
2547
			$result["error"]=$checkResult;
2547
			$result["error"]=$checkResult;
2548
			
2548
 
2549
			#回傳結果
2549
			#回傳結果
2550
			return $result;
2550
			return $result;
2551
			
2551
 
2552
			}#if end
2552
			}#if end
2553
		
2553
 
2554
		#如果 $_SESSION["username"] 不存在
2554
		#如果 $_SESSION["username"] 不存在
2555
		if(!isset($_SESSION["username"])){
2555
		if(!isset($_SESSION["username"])){
2556
			
2556
 
2557
			#設為"NULL"
2557
			#設為"NULL"
2558
			$_SESSION["username"]="NULL";
2558
			$_SESSION["username"]="NULL";
2559
			
2559
 
2560
			}#if end
2560
			}#if end
2561
		
2561
 
2562
		#取得最高的頻率
2562
		#取得最高的頻率
2563
		#涵式說明:
2563
		#涵式說明:
2564
		#找最大值,結果會回傳最大值.
2564
		#找最大值,結果會回傳最大值.
2565
		#回傳的結果:
2565
		#回傳的結果:
2566
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2566
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
Line 2570... Line 2570...
2570
		#$result["value"],最大值的數字.
2570
		#$result["value"],最大值的數字.
2571
		#必填的參數:
2571
		#必填的參數:
2572
		$conf["math::getMaxValue"]["rawDataArray"]=$conf["countArray"];#爲原始數據
2572
		$conf["math::getMaxValue"]["rawDataArray"]=$conf["countArray"];#爲原始數據
2573
		$getMaxValue=math::getMaxValue($conf["math::getMaxValue"]);
2573
		$getMaxValue=math::getMaxValue($conf["math::getMaxValue"]);
2574
		unset($conf["math::getMaxValue"]);
2574
		unset($conf["math::getMaxValue"]);
2575
		
2575
 
2576
		#如果取得最大值失敗
2576
		#如果取得最大值失敗
2577
		if($getMaxValue["status"]=="false"){
2577
		if($getMaxValue["status"]=="false"){
2578
			
2578
 
2579
			#設置執行不正常
2579
			#設置執行不正常
2580
			$result["status"]="false";
2580
			$result["status"]="false";
2581
			
2581
 
2582
			#設置執行錯誤訊息
2582
			#設置執行錯誤訊息
2583
			$result["error"]=$getMaxValue;
2583
			$result["error"]=$getMaxValue;
2584
			
2584
 
2585
			#回傳結果
2585
			#回傳結果
2586
			return $result;
2586
			return $result;
2587
			
2587
 
2588
			}#if end
2588
			}#if end
2589
		
2589
 
2590
		#取得頻率最大值
2590
		#取得頻率最大值
2591
		$maxFreq=$getMaxValue["value"];
2591
		$maxFreq=$getMaxValue["value"];
2592
		
2592
 
2593
		#取得最低的頻率
2593
		#取得最低的頻率
2594
		#涵式說明
2594
		#涵式說明
2595
		#找最小值,結果會回傳最小值
2595
		#找最小值,結果會回傳最小值
2596
		#回傳的內容
2596
		#回傳的內容
2597
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2597
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
Line 2601... Line 2601...
2601
		#$result["value"],陣列裏面最小的數值.
2601
		#$result["value"],陣列裏面最小的數值.
2602
		#必填的參數:
2602
		#必填的參數:
2603
		$conf["max::getMinValue"]["rawDataArray"]=$conf["countArray"];#爲原始數據
2603
		$conf["max::getMinValue"]["rawDataArray"]=$conf["countArray"];#爲原始數據
2604
		$getMinValue=math::getMinValue($conf["max::getMinValue"]);
2604
		$getMinValue=math::getMinValue($conf["max::getMinValue"]);
2605
		unset($conf["max::getMinValue"]);
2605
		unset($conf["max::getMinValue"]);
2606
		
2606
 
2607
		#如果取得最小值失敗
2607
		#如果取得最小值失敗
2608
		if($getMinValue["status"]=="false"){
2608
		if($getMinValue["status"]=="false"){
2609
			
2609
 
2610
			#設置執行不正常
2610
			#設置執行不正常
2611
			$result["status"]="false";
2611
			$result["status"]="false";
2612
			
2612
 
2613
			#設置執行錯誤訊息
2613
			#設置執行錯誤訊息
2614
			$result["error"]=$getMaxValue;
2614
			$result["error"]=$getMaxValue;
2615
			
2615
 
2616
			#回傳結果
2616
			#回傳結果
2617
			return $result;
2617
			return $result;
2618
			
2618
 
2619
			}#if end
2619
			}#if end
2620
		
2620
 
2621
		#取得頻率最小值
2621
		#取得頻率最小值
2622
		$minFreq=$getMinValue["value"];
2622
		$minFreq=$getMinValue["value"];
2623
		
2623
 
2624
		#debug
2624
		#debug
2625
		#var_dump($maxFreq);
2625
		#var_dump($maxFreq);
2626
		#var_dump($minFreq);
2626
		#var_dump($minFreq);
2627
		
2627
 
2628
		#檢查可省略的參數
2628
		#檢查可省略的參數
2629
		#函式說明:
2629
		#函式說明:
2630
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
2630
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
2631
		#回傳結果:
2631
		#回傳結果:
2632
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2632
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2646... Line 2646...
2646
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,null代表不指定.
2646
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,null代表不指定.
2647
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/barplot-".$_SESSION["username"].".png","true"," ","項目","頻率","true",null,null,null,"false");
2647
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/barplot-".$_SESSION["username"].".png","true"," ","項目","頻率","true",null,null,null,"false");
2648
		#無
2648
		#無
2649
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
2649
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
2650
		unset($conf["variableCheck.checkSkipableVarType"]);
2650
		unset($conf["variableCheck.checkSkipableVarType"]);
2651
		
2651
 
2652
		#如果檢查失敗
2652
		#如果檢查失敗
2653
		if($checkResult["status"]=="false"){
2653
		if($checkResult["status"]=="false"){
2654
			
2654
 
2655
			#設置執行不正常
2655
			#設置執行不正常
2656
			$result["status"]="false";
2656
			$result["status"]="false";
2657
			
2657
 
2658
			#設置執行錯誤訊息
2658
			#設置執行錯誤訊息
2659
			$result["error"]=$checkResult;
2659
			$result["error"]=$checkResult;
2660
			
2660
 
2661
			#回傳結果
2661
			#回傳結果
2662
			return $result;
2662
			return $result;
2663
			
2663
 
2664
			}#if end
2664
			}#if end
2665
			
2665
 
2666
		#如果檢查不通過
2666
		#如果檢查不通過
2667
		if($checkResult["passed"]=="false"){
2667
		if($checkResult["passed"]=="false"){
2668
			
2668
 
2669
			#設置執行不正常
2669
			#設置執行不正常
2670
			$result["status"]="false";
2670
			$result["status"]="false";
2671
			
2671
 
2672
			#設置執行錯誤訊息
2672
			#設置執行錯誤訊息
2673
			$result["error"]=$checkResult;
2673
			$result["error"]=$checkResult;
2674
			
2674
 
2675
			#回傳結果
2675
			#回傳結果
2676
			return $result;
2676
			return $result;
2677
			
2677
 
2678
			}#if end
2678
			}#if end
2679
			
2679
 
2680
		#初始化總頻率
2680
		#初始化總頻率
2681
		$totalCount=0;
2681
		$totalCount=0;
2682
		
2682
 
2683
		#有幾個要統計的物件陣列就執行幾次
2683
		#有幾個要統計的物件陣列就執行幾次
2684
		for($i=0;$i<count($conf["countArray"]);$i++){
2684
		for($i=0;$i<count($conf["countArray"]);$i++){
2685
			
2685
 
2686
			#加總頻率
2686
			#加總頻率
2687
			$totalCount=$totalCount+$conf["countArray"][$i];
2687
			$totalCount=$totalCount+$conf["countArray"][$i];
2688
			
2688
 
2689
			}#for end	
2689
			}#for end
2690
			
2690
 
2691
		#初始化 $counts 字串
2691
		#初始化 $counts 字串
2692
		$counts="count=c(";
2692
		$counts="count=c(";
2693
		
2693
 
2694
		#初始化 $labels 字串
2694
		#初始化 $labels 字串
2695
		$labels="timeLabel=c(";
2695
		$labels="timeLabel=c(";
2696
		
2696
 
2697
		#初始化 $legendStr 字串
2697
		#初始化 $legendStr 字串
2698
		$legendStr="legendStr=c(";
2698
		$legendStr="legendStr=c(";
2699
				
2699
 
2700
		#有幾個要統計的物件陣列就執行幾次
2700
		#有幾個要統計的物件陣列就執行幾次
2701
		for($i=0;$i<count($conf["countArray"]);$i++){
2701
		for($i=0;$i<count($conf["countArray"]);$i++){
2702
			
2702
 
2703
			#如果不是最後一個要統計的物件
2703
			#如果不是最後一個要統計的物件
2704
			if($i!=count($conf["countArray"])-1){
2704
			if($i!=count($conf["countArray"])-1){
2705
				
2705
 
2706
				#串接頻率,結尾加逗號
2706
				#串接頻率,結尾加逗號
2707
				$counts=$counts."".$conf["countArray"][$i].",";
2707
				$counts=$counts."".$conf["countArray"][$i].",";
2708
				
2708
 
2709
				#如果 $conf["autoRadioByCountArray"] 等於 "true"
2709
				#如果 $conf["autoRadioByCountArray"] 等於 "true"
2710
				if($conf["autoRadioByCountArray"]=="true"){
2710
				if($conf["autoRadioByCountArray"]=="true"){
2711
					
2711
 
2712
					#串接含有比例的輔助說明文字,結尾加逗號
2712
					#串接含有比例的輔助說明文字,結尾加逗號
2713
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].",比例=".round($conf["countArray"][$i]/$totalCount,2).")\",";
2713
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].",比例=".round($conf["countArray"][$i]/$totalCount,2).")\",";
2714
					
2714
 
2715
					}#if end
2715
					}#if end
2716
				
2716
 
2717
				#反之
2717
				#反之
2718
				else{
2718
				else{
2719
					
2719
 
2720
					#串接輔助說明文字,結尾加逗號
2720
					#串接輔助說明文字,結尾加逗號
2721
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].")\",";
2721
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].")\",";
2722
					
2722
 
2723
					}#else end
2723
					}#else end
2724
				
2724
 
2725
				#如果要取消圖例
2725
				#如果要取消圖例
2726
				if($conf["disableText"]=="true"){
2726
				if($conf["disableText"]=="true"){
2727
					
2727
 
2728
					#如果 $conf["autoRadioByCountArray"] 等於 "true"
2728
					#如果 $conf["autoRadioByCountArray"] 等於 "true"
2729
					if($conf["autoRadioByCountArray"]=="true"){
2729
					if($conf["autoRadioByCountArray"]=="true"){
2730
					
2730
 
2731
						#串接項目的名稱
2731
						#串接項目的名稱
2732
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."(比例=".round($conf["countArray"][$i]/$totalCount,2).")\",";
2732
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."(比例=".round($conf["countArray"][$i]/$totalCount,2).")\",";
2733
						
2733
 
2734
						}#if end
2734
						}#if end
2735
					
2735
 
2736
					#反之 不需要比例資訊	
2736
					#反之 不需要比例資訊
2737
					else{
2737
					else{
2738
						
2738
 
2739
						#串接項目的名稱
2739
						#串接項目的名稱
2740
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."\",";
2740
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."\",";
2741
						
2741
 
2742
						}#else end
2742
						}#else end
2743
											
2743
 
2744
					}#if end
2744
					}#if end
2745
					
2745
 
2746
				#反之不要取消圖例	
2746
				#反之不要取消圖例
2747
				else{
2747
				else{
2748
					
2748
 
2749
					#串接物件名稱,結尾加逗號
2749
					#串接物件名稱,結尾加逗號
2750
					$labels=$labels."\"".$i."\",";
2750
					$labels=$labels."\"".$i."\",";
2751
					
2751
 
2752
					}#else end
2752
					}#else end
2753
							
2753
 
2754
				}#if end
2754
				}#if end
2755
				
2755
 
2756
			#反之是最後一個物件
2756
			#反之是最後一個物件
2757
			else{
2757
			else{
2758
				
2758
 
2759
				#串接頻率,最後面加上)
2759
				#串接頻率,最後面加上)
2760
				$counts=$counts.$conf["countArray"][$i].")";
2760
				$counts=$counts.$conf["countArray"][$i].")";
2761
				
2761
 
2762
				#如果 $conf["autoRadioByCountArray"] 等於 "true"
2762
				#如果 $conf["autoRadioByCountArray"] 等於 "true"
2763
				if($conf["autoRadioByCountArray"]=="true"){
2763
				if($conf["autoRadioByCountArray"]=="true"){
2764
					
2764
 
2765
					#串接含有比例的輔助說明文字
2765
					#串接含有比例的輔助說明文字
2766
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].",比例=".round($conf["countArray"][$i]/$totalCount,2).")\")";
2766
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].",比例=".round($conf["countArray"][$i]/$totalCount,2).")\")";
2767
					
2767
 
2768
					}#if end
2768
					}#if end
2769
				
2769
 
2770
				#反之
2770
				#反之
2771
				else{
2771
				else{
2772
					
2772
 
2773
					#串接含有比例的輔助說明文字
2773
					#串接含有比例的輔助說明文字
2774
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].")\")";
2774
					$legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].")\")";
2775
					
2775
 
2776
					}#else end
2776
					}#else end
2777
						
2777
 
2778
				#如果要取消圖例
2778
				#如果要取消圖例
2779
				if($conf["disableText"]=="true"){
2779
				if($conf["disableText"]=="true"){
2780
					
2780
 
2781
					#如果 $conf["autoRadioByCountArray"] 等於 "true"
2781
					#如果 $conf["autoRadioByCountArray"] 等於 "true"
2782
					if($conf["autoRadioByCountArray"]=="true"){
2782
					if($conf["autoRadioByCountArray"]=="true"){
2783
					
2783
 
2784
						#串接項目的名稱
2784
						#串接項目的名稱
2785
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."(比例=".round($conf["countArray"][$i]/$totalCount,2).")\")";
2785
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."(比例=".round($conf["countArray"][$i]/$totalCount,2).")\")";
2786
						
2786
 
2787
						}#if end
2787
						}#if end
2788
					
2788
 
2789
					#反之不要比例資訊	
2789
					#反之不要比例資訊
2790
					else{
2790
					else{
2791
						
2791
 
2792
						#串接項目的名稱
2792
						#串接項目的名稱
2793
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."\")";
2793
						$labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."\")";
2794
						
2794
 
2795
						}#else end
2795
						}#else end
2796
										
2796
 
2797
					}#if end		
2797
					}#if end
2798
					
2798
 
2799
				#反之不要取消圖例	
2799
				#反之不要取消圖例
2800
				else{
2800
				else{
2801
					
2801
 
2802
					#串接物件名稱,最後面加上)
2802
					#串接物件名稱,最後面加上)
2803
					$labels=$labels."\"".$i."\")";
2803
					$labels=$labels."\"".$i."\")";
2804
					
2804
 
2805
					}#else end	
2805
					}#else end
2806
								
2806
 
2807
				}#else end
2807
				}#else end
2808
							
2808
 
2809
			}#for end
2809
			}#for end
2810
			
2810
 
2811
		#$conf["line"]=array();
2811
		#$conf["line"]=array();
2812
		#$conf["line"][$i],一維字串陣列,代表要在圖上劃第$i+1條線的資訊
2812
		#$conf["line"][$i],一維字串陣列,代表要在圖上劃第$i+1條線的資訊
2813
		#$conf["line"][$i]["startX"],整數,代表線條起始點的X軸坐標.
2813
		#$conf["line"][$i]["startX"],整數,代表線條起始點的X軸坐標.
2814
		#$conf["line"][$i]["startY"],整數,代表線條起始點的Y軸坐標.
2814
		#$conf["line"][$i]["startY"],整數,代表線條起始點的Y軸坐標.
2815
		#$conf["line"][$i]["endX"],整數,代表線條終點的X軸坐標.
2815
		#$conf["line"][$i]["endX"],整數,代表線條終點的X軸坐標.
2816
		#$conf["line"][$i]["endY"],整數,代表線條終點的Y軸坐標.	
2816
		#$conf["line"][$i]["endY"],整數,代表線條終點的Y軸坐標.
2817
		#$conf["line"][$i]["color"],顏色,目前有black,green,red三種	
2817
		#$conf["line"][$i]["color"],顏色,目前有black,green,red三種
2818
		
2818
 
2819
		#初始化儲存劃線R語法陣列
2819
		#初始化儲存劃線R語法陣列
2820
		$line=array();	
2820
		$line=array();
2821
			
2821
 
2822
		#如果 $conf["line"] 有設定
2822
		#如果 $conf["line"] 有設定
2823
		if(isset($conf["line"])){
2823
		if(isset($conf["line"])){
2824
			
2824
 
2825
			#有幾條線就執行幾次
2825
			#有幾條線就執行幾次
2826
			for($i=0;$i<count($conf["line"]);$i++){
2826
			for($i=0;$i<count($conf["line"]);$i++){
2827
				
2827
 
2828
				#設置線條的x軸啟起點與終點坐標
2828
				#設置線條的x軸啟起點與終點坐標
2829
				$line[]="#設置線條的x軸啟起點與終點坐標";
2829
				$line[]="#設置線條的x軸啟起點與終點坐標";
2830
				$line[]="xp=c(".$conf["line"][$i]["startX"].",".$conf["line"][$i]["endX"].")";
2830
				$line[]="xp=c(".$conf["line"][$i]["startX"].",".$conf["line"][$i]["endX"].")";
2831
				
2831
 
2832
				#設置線條的y軸啟起點與終點坐標
2832
				#設置線條的y軸啟起點與終點坐標
2833
				$line[]="#設置線條的y軸啟起點與終點坐標";
2833
				$line[]="#設置線條的y軸啟起點與終點坐標";
2834
				$line[]="yp=c(".$conf["line"][$i]["startY"].",".$conf["line"][$i]["endY"].")";
2834
				$line[]="yp=c(".$conf["line"][$i]["startY"].",".$conf["line"][$i]["endY"].")";
2835
				
2835
 
2836
				#判斷 $conf["line"][$i]["color"]
2836
				#判斷 $conf["line"][$i]["color"]
2837
				switch($conf["line"][$i]["color"]){
2837
				switch($conf["line"][$i]["color"]){
2838
					
2838
 
2839
					#如果是 "black"
2839
					#如果是 "black"
2840
					case "black":
2840
					case "black":
2841
					
2841
 
2842
						#劃線
2842
						#劃線
2843
						$line[]="#劃線";
2843
						$line[]="#劃線";
2844
						$line[]="lines(xp,yp)";
2844
						$line[]="lines(xp,yp)";
2845
										
2845
 
2846
						#跳出 switch
2846
						#跳出 switch
2847
						break;
2847
						break;
2848
						
2848
 
2849
					#如果是 "green"
2849
					#如果是 "green"
2850
					case "green":
2850
					case "green":
2851
					
2851
 
2852
						#劃綠色的線
2852
						#劃綠色的線
2853
						$line[]="#劃線綠色的線";
2853
						$line[]="#劃線綠色的線";
2854
						$line[]="lines(xp,yp,col=3)";
2854
						$line[]="lines(xp,yp,col=3)";
2855
						
2855
 
2856
						#跳出 switch
2856
						#跳出 switch
2857
						break;
2857
						break;
2858
						
2858
 
2859
					#如果是 "red"
2859
					#如果是 "red"
2860
					case "red":
2860
					case "red":
2861
					
2861
 
2862
						#劃紅色的線
2862
						#劃紅色的線
2863
						$line[]="#劃線紅色的線";
2863
						$line[]="#劃線紅色的線";
2864
						$line[]="lines(xp,yp,col=2)";
2864
						$line[]="lines(xp,yp,col=2)";
2865
					
2865
 
2866
						#跳出 switch
2866
						#跳出 switch
2867
						break;
2867
						break;
2868
						
2868
 
2869
					#如果是其他
2869
					#如果是其他
2870
					default:
2870
					default:
2871
					
2871
 
2872
						#設置執行不正常
2872
						#設置執行不正常
2873
						$result["status"]="false";
2873
						$result["status"]="false";
2874
						
2874
 
2875
						#設置執行錯誤訊息
2875
						#設置執行錯誤訊息
2876
						$result["error"][]="未知的顏色:".$conf["line"][$i]["color"];
2876
						$result["error"][]="未知的顏色:".$conf["line"][$i]["color"];
2877
						
2877
 
2878
						#回傳結果
2878
						#回傳結果
2879
						return $result;
2879
						return $result;
2880
					
2880
 
2881
					}#switch end
2881
					}#switch end
2882
									
2882
 
2883
				}#for end
2883
				}#for end
2884
			
2884
 
2885
			}#if end	
2885
			}#if end
2886
			
2886
 
2887
		#如果有設置圖片寬度
2887
		#如果有設置圖片寬度
2888
		if(isset($conf["picWidth"])){
2888
		if(isset($conf["picWidth"])){
2889
			
2889
 
2890
			#設置圖片寬度的語法
2890
			#設置圖片寬度的語法
2891
			$conf["picWidth"]=",width=\"".$conf["picWidth"]."\"";
2891
			$conf["picWidth"]=",width=\"".$conf["picWidth"]."\"";
2892
			
2892
 
2893
			}#if end	
2893
			}#if end
2894
			
2894
 
2895
		#反之
2895
		#反之
2896
		else{
2896
		else{
2897
			
2897
 
2898
			#不設置圖片寬度
2898
			#不設置圖片寬度
2899
			$conf["picWidth"]="";
2899
			$conf["picWidth"]="";
2900
			
2900
 
2901
			}#else end
2901
			}#else end
2902
			
2902
 
2903
		#如果有設置圖片寬度
2903
		#如果有設置圖片寬度
2904
		if(isset($conf["picHeight"])){
2904
		if(isset($conf["picHeight"])){
2905
			
2905
 
2906
			#設置圖片寬度的語法
2906
			#設置圖片寬度的語法
2907
			$conf["picHeight"]=",Height=\"".$conf["picHeight"]."\"";
2907
			$conf["picHeight"]=",Height=\"".$conf["picHeight"]."\"";
2908
			
2908
 
2909
			}#if end	
2909
			}#if end
2910
			
2910
 
2911
		#反之
2911
		#反之
2912
		else{
2912
		else{
2913
			
2913
 
2914
			#不設置圖片寬度
2914
			#不設置圖片寬度
2915
			$conf["picHeight"]="";
2915
			$conf["picHeight"]="";
2916
			
2916
 
2917
			}#else end
2917
			}#else end
2918
			
2918
 
2919
		#涵式說明:
2919
		#涵式說明:
2920
		#建立R檔案
2920
		#建立R檔案
2921
		#回傳的結果:
2921
		#回傳的結果:
2922
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
2922
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
2923
		#$result["error"],錯誤訊息陣列.
2923
		#$result["error"],錯誤訊息陣列.
Line 2934... Line 2934...
2934
		$conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
2934
		$conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
2935
		$conf["R.writeRfile"]["textToWrite"][]="Encoding(timeLabel)<-\"UTF-8\"";
2935
		$conf["R.writeRfile"]["textToWrite"][]="Encoding(timeLabel)<-\"UTF-8\"";
2936
		$conf["R.writeRfile"]["textToWrite"][]="";
2936
		$conf["R.writeRfile"]["textToWrite"][]="";
2937
		$conf["R.writeRfile"]["textToWrite"][]="#欲繪出的輔助說明內容";
2937
		$conf["R.writeRfile"]["textToWrite"][]="#欲繪出的輔助說明內容";
2938
		$conf["R.writeRfile"]["textToWrite"][]=$legendStr;
2938
		$conf["R.writeRfile"]["textToWrite"][]=$legendStr;
2939
		$conf["R.writeRfile"]["textToWrite"][]="";					
2939
		$conf["R.writeRfile"]["textToWrite"][]="";
2940
		$conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
2940
		$conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
2941
		$conf["R.writeRfile"]["textToWrite"][]="Encoding(legendStr)<-\"UTF-8\"";
2941
		$conf["R.writeRfile"]["textToWrite"][]="Encoding(legendStr)<-\"UTF-8\"";
2942
		$conf["R.writeRfile"]["textToWrite"][]="";
2942
		$conf["R.writeRfile"]["textToWrite"][]="";
2943
		$conf["R.writeRfile"]["textToWrite"][]="#要繪出的資料頻率";
2943
		$conf["R.writeRfile"]["textToWrite"][]="#要繪出的資料頻率";
2944
		$conf["R.writeRfile"]["textToWrite"][]=$counts;
2944
		$conf["R.writeRfile"]["textToWrite"][]=$counts;
Line 2969... Line 2969...
2969
		$conf["R.writeRfile"]["textToWrite"][]="#頻率名稱資料爲timeLabel";
2969
		$conf["R.writeRfile"]["textToWrite"][]="#頻率名稱資料爲timeLabel";
2970
		$conf["R.writeRfile"]["textToWrite"][]="#圖的標題爲 \"一年內的每月的分佈\"";
2970
		$conf["R.writeRfile"]["textToWrite"][]="#圖的標題爲 \"一年內的每月的分佈\"";
2971
		$conf["R.writeRfile"]["textToWrite"][]="#x軸標題爲 xlabStr";
2971
		$conf["R.writeRfile"]["textToWrite"][]="#x軸標題爲 xlabStr";
2972
		$conf["R.writeRfile"]["textToWrite"][]="#y軸標題爲 ylabStr";
2972
		$conf["R.writeRfile"]["textToWrite"][]="#y軸標題爲 ylabStr";
2973
		$conf["R.writeRfile"]["textToWrite"][]="#註解文字為 legendStr";
2973
		$conf["R.writeRfile"]["textToWrite"][]="#註解文字為 legendStr";
2974
		
2974
 
2975
		#如果要取消圖例
2975
		#如果要取消圖例
2976
		if($conf["disableText"]=="true"){
2976
		if($conf["disableText"]=="true"){
2977
			
2977
 
2978
			#產生沒有圖例的長條圖
2978
			#產生沒有圖例的長條圖
2979
			$conf["R.writeRfile"]["textToWrite"][]="barplot(count,names=timeLabel,main=barplotMain,xlab=xlabStr,ylab=ylabStr)";
2979
			$conf["R.writeRfile"]["textToWrite"][]="barplot(count,names=timeLabel,main=barplotMain,xlab=xlabStr,ylab=ylabStr)";
2980
			
2980
 
2981
			}#if end
2981
			}#if end
2982
		
2982
 
2983
		#反之代表不取消圖例
2983
		#反之代表不取消圖例
2984
		else{
2984
		else{
2985
		
2985
 
2986
			#產生有圖例的長條圖
2986
			#產生有圖例的長條圖
2987
			$conf["R.writeRfile"]["textToWrite"][]="barplot(count,names=timeLabel,main=barplotMain,xlab=xlabStr,ylab=ylabStr,legend.text=legendStr)";
2987
			$conf["R.writeRfile"]["textToWrite"][]="barplot(count,names=timeLabel,main=barplotMain,xlab=xlabStr,ylab=ylabStr,legend.text=legendStr)";
2988
		
2988
 
2989
			}#else end
2989
			}#else end
2990
		
2990
 
2991
		$conf["R.writeRfile"]["textToWrite"][]="";
2991
		$conf["R.writeRfile"]["textToWrite"][]="";
2992
		
2992
 
2993
		#$line有幾個元素就執行幾次迴圈
2993
		#$line有幾個元素就執行幾次迴圈
2994
		for($i=0;$i<count($line);$i++){
2994
		for($i=0;$i<count($line);$i++){
2995
			
2995
 
2996
			#存入劃線的R語法
2996
			#存入劃線的R語法
2997
			$conf["R.writeRfile"]["textToWrite"][]=$line[$i];
2997
			$conf["R.writeRfile"]["textToWrite"][]=$line[$i];
2998
			
2998
 
2999
			}#for end
2999
			}#for end
3000
					
3000
 
3001
		$conf["R.writeRfile"]["textToWrite"][]="";
3001
		$conf["R.writeRfile"]["textToWrite"][]="";
3002
		$conf["R.writeRfile"]["textToWrite"][]="#關閉繪圖裝置";
3002
		$conf["R.writeRfile"]["textToWrite"][]="#關閉繪圖裝置";
3003
		$conf["R.writeRfile"]["textToWrite"][]="dev.off()";
3003
		$conf["R.writeRfile"]["textToWrite"][]="dev.off()";
3004
		#$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
3004
		#$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
3005
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3005
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3006
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];;
3006
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];;
3007
		$rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
3007
		$rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
3008
		unset($conf["R.writeRfile"]);
3008
		unset($conf["R.writeRfile"]);
3009
		
3009
 
3010
		#如果R腳本檔建立失敗
3010
		#如果R腳本檔建立失敗
3011
		if($rScriptCreateResult["status"]=="false"){
3011
		if($rScriptCreateResult["status"]=="false"){
3012
			
3012
 
3013
			#設置執行不正常
3013
			#設置執行不正常
3014
			$result["status"]="false";
3014
			$result["status"]="false";
3015
			
3015
 
3016
			#設置執行錯誤訊息
3016
			#設置執行錯誤訊息
3017
			$result["error"]=$rScriptCreateResult;
3017
			$result["error"]=$rScriptCreateResult;
3018
			
3018
 
3019
			#回傳結果
3019
			#回傳結果
3020
			return $result;
3020
			return $result;
3021
			
3021
 
3022
			}#if end
3022
			}#if end
3023
			
3023
 
3024
		#執行R腳本
3024
		#執行R腳本
3025
		#函式說明:
3025
		#函式說明:
3026
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
3026
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
3027
		#回傳的結果:
3027
		#回傳的結果:
3028
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3028
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3037... Line 3037...
3037
		#可省略的參數:
3037
		#可省略的參數:
3038
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
3038
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
3039
		#$conf["disbaleOptimal"]="true";
3039
		#$conf["disbaleOptimal"]="true";
3040
		$executeRresult=R::executeR($conf["R.executeR"]);
3040
		$executeRresult=R::executeR($conf["R.executeR"]);
3041
		unset($conf["R.executeR"]);
3041
		unset($conf["R.executeR"]);
3042
		
3042
 
3043
		#如果執行R失敗
3043
		#如果執行R失敗
3044
		if($executeRresult["status"]=="false"){
3044
		if($executeRresult["status"]=="false"){
3045
			
3045
 
3046
			#設置執行不正常
3046
			#設置執行不正常
3047
			$result["status"]="false";
3047
			$result["status"]="false";
3048
			
3048
 
3049
			#設置執行錯誤訊息
3049
			#設置執行錯誤訊息
3050
			$result["error"]=$executeRresult;
3050
			$result["error"]=$executeRresult;
3051
			
3051
 
3052
			#回傳結果
3052
			#回傳結果
3053
			return $result;
3053
			return $result;
3054
			
3054
 
3055
			}#if end
3055
			}#if end
3056
			
3056
 
3057
		#檢查圖片檔案是否有產生
3057
		#檢查圖片檔案是否有產生
3058
		#涵式說明:檢查多個檔案與資料夾是否存在.
3058
		#涵式說明:檢查多個檔案與資料夾是否存在.
3059
		#回傳的結果:
3059
		#回傳的結果:
3060
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3060
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3061
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3061
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
Line 3066... Line 3066...
3066
		#參考資料來源:
3066
		#參考資料來源:
3067
		#http://php.net/manual/en/function.file-exists.php
3067
		#http://php.net/manual/en/function.file-exists.php
3068
		#http://php.net/manual/en/control-structures.foreach.php
3068
		#http://php.net/manual/en/control-structures.foreach.php
3069
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3069
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3070
		unset($conf["fileAccess.checkMultiFileExist"]);
3070
		unset($conf["fileAccess.checkMultiFileExist"]);
3071
		
3071
 
3072
		#如果要產生的圖片不存在
3072
		#如果要產生的圖片不存在
3073
		if($fileCheckResult["varExist"][0]=="false"){
3073
		if($fileCheckResult["varExist"][0]=="false"){
3074
			
3074
 
3075
			#設置執行不正常
3075
			#設置執行不正常
3076
			$result["status"]="false";
3076
			$result["status"]="false";
3077
			
3077
 
3078
			#設置執行錯誤訊息
3078
			#設置執行錯誤訊息
3079
			$result["error"]=$fileCheckResult;
3079
			$result["error"]=$fileCheckResult;
3080
			
3080
 
3081
			#回傳結果
3081
			#回傳結果
3082
			return $result;
3082
			return $result;
3083
			
3083
 
3084
			}#if end
3084
			}#if end
3085
			
3085
 
3086
		#取得圖片位置與名稱
3086
		#取得圖片位置與名稱
3087
		$result["img"]=$conf["imgFileName"];
3087
		$result["img"]=$conf["imgFileName"];
3088
			
3088
 
3089
		#函數說明:
3089
		#函數說明:
3090
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
3090
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
3091
		#回傳結果:
3091
		#回傳結果:
3092
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3092
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3093
		#$result["error"],錯誤訊息
3093
		#$result["error"],錯誤訊息
3094
		#$result["content"],圖片的連結資訊
3094
		#$result["content"],圖片的連結資訊
3095
		#$result["function"],當前執行的函數名稱 
3095
		#$result["function"],當前執行的函數名稱
3096
		#必填參數:
3096
		#必填參數:
3097
		#$conf["img::data"]["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
3097
		#$conf["img::data"]["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
3098
		$conf["img::data"]["imgPosition"]=$conf["imgFileName"];
3098
		$conf["img::data"]["imgPosition"]=$conf["imgFileName"];
3099
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3099
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3100
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
3100
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
Line 3113... Line 3113...
3113
		$conf["img::data"]["delImg"]=$conf["del"];
3113
		$conf["img::data"]["delImg"]=$conf["del"];
3114
		#參考資料:
3114
		#參考資料:
3115
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
3115
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
3116
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
3116
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
3117
		$data=img::data($conf["img::data"]);
3117
		$data=img::data($conf["img::data"]);
3118
		unset($conf["img::data"]);	
3118
		unset($conf["img::data"]);
3119
			
3119
 
3120
		#如果顯示圖片失敗
3120
		#如果顯示圖片失敗
3121
		if($data["status"]=="false"){
3121
		if($data["status"]=="false"){
3122
			
3122
 
3123
			#設置執行失敗
3123
			#設置執行失敗
3124
			$result["status"]="false";
3124
			$result["status"]="false";
3125
			
3125
 
3126
			#設置執行錯誤訊息
3126
			#設置執行錯誤訊息
3127
			$result["error"]=$data;
3127
			$result["error"]=$data;
3128
			
3128
 
3129
			#回傳結果
3129
			#回傳結果
3130
			return $result;
3130
			return $result;
3131
			
3131
 
3132
			}#if end	
3132
			}#if end
3133
						
3133
 
3134
		#取得顯示圖片的語法
3134
		#取得顯示圖片的語法
3135
		$result["content"]=$data["content"];	
3135
		$result["content"]=$data["content"];
3136
			
3136
 
3137
		#執行到這邊代表執行正常
3137
		#執行到這邊代表執行正常
3138
		$result["status"]="true";
3138
		$result["status"]="true";
3139
		
3139
 
3140
		#回傳結果
3140
		#回傳結果
3141
		return $result; 
3141
		return $result;
3142
		
3142
 
3143
		}#function createBarPlot end
3143
		}#function createBarPlot end
3144
		
3144
 
3145
	/*
3145
	/*
3146
	#函式說明
3146
	#函式說明
3147
	#繪製直方圖
3147
	#繪製直方圖
3148
	#回傳結果:
3148
	#回傳結果:
3149
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
3149
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
Line 3153... Line 3153...
3153
	#$result["content"],放置圖片的語法
3153
	#$result["content"],放置圖片的語法
3154
	#必填參數:
3154
	#必填參數:
3155
	#$conf["numArray"],字串陣列,要進行分組統計的原始資料
3155
	#$conf["numArray"],字串陣列,要進行分組統計的原始資料
3156
	$conf["numArray"]=array();
3156
	$conf["numArray"]=array();
3157
	#$conf["classCount"],字串,資料要分成幾組
3157
	#$conf["classCount"],字串,資料要分成幾組
3158
	$conf["classCount"]="5"; 
3158
	$conf["classCount"]="5";
3159
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3159
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3160
	$conf["fileArgu"]=__FILE__;
3160
	$conf["fileArgu"]=__FILE__;
3161
	#可省略參數:
3161
	#可省略參數:
3162
	#$conf["imgFileName"],字串,圖片存放的位置與名稱,預設爲 "hist-".$SESSION["username"]."svg"
3162
	#$conf["imgFileName"],字串,圖片存放的位置與名稱,預設爲 "hist-".$SESSION["username"]."svg"
3163
	#$conf["imgFileName"]=".R/hist-".$SESSION["username"]."svg";
3163
	#$conf["imgFileName"]=".R/hist-".$SESSION["username"]."svg";
Line 3173... Line 3173...
3173
	#無.
3173
	#無.
3174
	#備註:
3174
	#備註:
3175
	#無
3175
	#無
3176
	*/
3176
	*/
3177
	public static function createHist(&$conf=array()){
3177
	public static function createHist(&$conf=array()){
3178
		
3178
 
3179
		#初始化要回傳的內容
3179
		#初始化要回傳的內容
3180
		$result=array();
3180
		$result=array();
3181
		
3181
 
3182
		#取得當前函數名稱
3182
		#取得當前函數名稱
3183
		$result["function"]=__FUNCTION__;
3183
		$result["function"]=__FUNCTION__;
3184
		
3184
 
3185
		#如果 $conf 不為陣列
3185
		#如果 $conf 不為陣列
3186
		if(gettype($conf)!="array"){
3186
		if(gettype($conf)!="array"){
3187
			
3187
 
3188
			#設置執行失敗
3188
			#設置執行失敗
3189
			$result["status"]="false";
3189
			$result["status"]="false";
3190
			
3190
 
3191
			#設置執行錯誤訊息
3191
			#設置執行錯誤訊息
3192
			$result["error"][]="\$conf變數須為陣列形態";
3192
			$result["error"][]="\$conf變數須為陣列形態";
3193
 
3193
 
3194
			#如果傳入的參數為 null
3194
			#如果傳入的參數為 null
3195
			if($conf==null){
3195
			if($conf==null){
3196
				
3196
 
3197
				#設置執行錯誤訊息
3197
				#設置執行錯誤訊息
3198
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3198
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3199
				
3199
 
3200
				}#if end
3200
				}#if end
3201
 
3201
 
3202
			#回傳結果
3202
			#回傳結果
3203
			return $result;
3203
			return $result;
3204
			
3204
 
3205
			}#if end
3205
			}#if end
3206
		
3206
 
3207
		#檢查必填的參數
3207
		#檢查必填的參數
3208
		#涵式說明:
3208
		#涵式說明:
3209
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3209
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3210
		#回傳的結果:
3210
		#回傳的結果:
3211
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3211
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3217... Line 3217...
3217
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3217
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3218
		#必填寫的參數:
3218
		#必填寫的參數:
3219
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
3219
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
3220
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("numArray","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3220
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("numArray","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3221
		#可以省略的參數:
3221
		#可以省略的參數:
3222
		$conf["variableCheck.isexistMulti"]["variableType"]=array("array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3222
		$conf["variableCheck.isexistMulti"]["variableType"]=array("array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
3223
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3223
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3224
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
3224
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
3225
		unset($conf["variableCheck.isexistMulti"]);
3225
		unset($conf["variableCheck.isexistMulti"]);
3226
		
3226
 
3227
		#如果檢查失敗
3227
		#如果檢查失敗
3228
		if($checkResult["status"]=="false"){
3228
		if($checkResult["status"]=="false"){
3229
			
3229
 
3230
			#設置執行不正常
3230
			#設置執行不正常
3231
			$result["status"]="false";
3231
			$result["status"]="false";
3232
			
3232
 
3233
			#設置執行錯誤訊息
3233
			#設置執行錯誤訊息
3234
			$result["error"]=$checkResult;
3234
			$result["error"]=$checkResult;
3235
			
3235
 
3236
			#回傳結果
3236
			#回傳結果
3237
			return $result;
3237
			return $result;
3238
			
3238
 
3239
			}#if end
3239
			}#if end
3240
			
3240
 
3241
		#如果檢查不通過
3241
		#如果檢查不通過
3242
		if($checkResult["passed"]=="false"){
3242
		if($checkResult["passed"]=="false"){
3243
			
3243
 
3244
			#設置執行不正常
3244
			#設置執行不正常
3245
			$result["status"]="false";
3245
			$result["status"]="false";
3246
			
3246
 
3247
			#設置執行錯誤訊息
3247
			#設置執行錯誤訊息
3248
			$result["error"]=$checkResult;
3248
			$result["error"]=$checkResult;
3249
			
3249
 
3250
			#回傳結果
3250
			#回傳結果
3251
			return $result;
3251
			return $result;
3252
			
3252
 
3253
			}#if end
3253
			}#if end
3254
		
3254
 
3255
		#檢查可省略的參數
3255
		#檢查可省略的參數
3256
		#函式說明:
3256
		#函式說明:
3257
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
3257
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
3258
		#回傳結果:
3258
		#回傳結果:
3259
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3259
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3273... Line 3273...
3273
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
3273
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
3274
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/hist-".$_SESSION["username"].".svg","true"," ","區間","頻率");
3274
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/hist-".$_SESSION["username"].".svg","true"," ","區間","頻率");
3275
		#無
3275
		#無
3276
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
3276
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
3277
		unset($conf["variableCheck.checkSkipableVarType"]);
3277
		unset($conf["variableCheck.checkSkipableVarType"]);
3278
		
3278
 
3279
		#如果檢查失敗
3279
		#如果檢查失敗
3280
		if($checkResult["status"]=="false"){
3280
		if($checkResult["status"]=="false"){
3281
			
3281
 
3282
			#設置執行不正常
3282
			#設置執行不正常
3283
			$result["status"]="false";
3283
			$result["status"]="false";
3284
			
3284
 
3285
			#設置執行錯誤訊息
3285
			#設置執行錯誤訊息
3286
			$result["error"]=$checkResult;
3286
			$result["error"]=$checkResult;
3287
			
3287
 
3288
			#回傳結果
3288
			#回傳結果
3289
			return $result;
3289
			return $result;
3290
			
3290
 
3291
			}#if end
3291
			}#if end
3292
			
3292
 
3293
		#如果檢查不通過
3293
		#如果檢查不通過
3294
		if($checkResult["passed"]=="false"){
3294
		if($checkResult["passed"]=="false"){
3295
			
3295
 
3296
			#設置執行不正常
3296
			#設置執行不正常
3297
			$result["status"]="false";
3297
			$result["status"]="false";
3298
			
3298
 
3299
			#設置執行錯誤訊息
3299
			#設置執行錯誤訊息
3300
			$result["error"]=$checkResult;
3300
			$result["error"]=$checkResult;
3301
			
3301
 
3302
			#回傳結果
3302
			#回傳結果
3303
			return $result;
3303
			return $result;
3304
			
3304
 
3305
			}#if end
3305
			}#if end
3306
			
3306
 
3307
		#初始化 要進行統計的數字資料
3307
		#初始化 要進行統計的數字資料
3308
		$numData="numData=c(";
3308
		$numData="numData=c(";
3309
		
3309
 
3310
		#有幾個比例陣列就執行幾次
3310
		#有幾個比例陣列就執行幾次
3311
		for($i=0;$i<count($conf["numArray"]);$i++){
3311
		for($i=0;$i<count($conf["numArray"]);$i++){
3312
			
3312
 
3313
			#如果不是最後一個比例
3313
			#如果不是最後一個比例
3314
			if($i!=count($conf["numArray"])-1){
3314
			if($i!=count($conf["numArray"])-1){
3315
				
3315
 
3316
				#串接比例,結尾加逗號
3316
				#串接比例,結尾加逗號
3317
				$numData=$numData.$conf["numArray"][$i].",";
3317
				$numData=$numData.$conf["numArray"][$i].",";
3318
				
3318
 
3319
				}#if end
3319
				}#if end
3320
				
3320
 
3321
			#反之是最後一個比例
3321
			#反之是最後一個比例
3322
			else{
3322
			else{
3323
				
3323
 
3324
				#串接比例,最後面加上)
3324
				#串接比例,最後面加上)
3325
				$numData=$numData.$conf["numArray"][$i].")";
3325
				$numData=$numData.$conf["numArray"][$i].")";
3326
				
3326
 
3327
				}#else end
3327
				}#else end
3328
			
3328
 
3329
			}#for end
3329
			}#for end
3330
			
3330
 
3331
		#涵式說明:
3331
		#涵式說明:
3332
		#建立R檔案
3332
		#建立R檔案
3333
		#回傳的結果:
3333
		#回傳的結果:
3334
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3334
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3335
		#$result["error"],錯誤訊息陣列.
3335
		#$result["error"],錯誤訊息陣列.
Line 3375... Line 3375...
3375
		#$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
3375
		#$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
3376
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3376
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3377
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
3377
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
3378
		$rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
3378
		$rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
3379
		unset($conf["R.writeRfile"]);
3379
		unset($conf["R.writeRfile"]);
3380
		
3380
 
3381
		#如果R腳本檔建立失敗
3381
		#如果R腳本檔建立失敗
3382
		if($rScriptCreateResult["status"]=="false"){
3382
		if($rScriptCreateResult["status"]=="false"){
3383
			
3383
 
3384
			#設置執行不正常
3384
			#設置執行不正常
3385
			$result["status"]="false";
3385
			$result["status"]="false";
3386
			
3386
 
3387
			#設置執行錯誤訊息
3387
			#設置執行錯誤訊息
3388
			$result["error"]=$rScriptCreateResult;
3388
			$result["error"]=$rScriptCreateResult;
3389
			
3389
 
3390
			#回傳結果
3390
			#回傳結果
3391
			return $result;
3391
			return $result;
3392
			
3392
 
3393
			}#if end
3393
			}#if end
3394
			
3394
 
3395
		#執行R腳本
3395
		#執行R腳本
3396
		#函式說明:
3396
		#函式說明:
3397
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
3397
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
3398
		#回傳的結果:
3398
		#回傳的結果:
3399
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3399
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3408... Line 3408...
3408
		#可省略的參數:
3408
		#可省略的參數:
3409
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
3409
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
3410
		#$conf["disbaleOptimal"]="true";
3410
		#$conf["disbaleOptimal"]="true";
3411
		$executeRresult=R::executeR($conf["R.executeR"]);
3411
		$executeRresult=R::executeR($conf["R.executeR"]);
3412
		unset($conf["R.executeR"]);
3412
		unset($conf["R.executeR"]);
3413
		
3413
 
3414
		#如果執行R失敗
3414
		#如果執行R失敗
3415
		if($executeRresult["status"]=="false"){
3415
		if($executeRresult["status"]=="false"){
3416
			
3416
 
3417
			#設置執行不正常
3417
			#設置執行不正常
3418
			$result["status"]="false";
3418
			$result["status"]="false";
3419
			
3419
 
3420
			#設置執行錯誤訊息
3420
			#設置執行錯誤訊息
3421
			$result["error"]=$executeRresult;
3421
			$result["error"]=$executeRresult;
3422
			
3422
 
3423
			#回傳結果
3423
			#回傳結果
3424
			return $result;
3424
			return $result;
3425
			
3425
 
3426
			}#if end
3426
			}#if end
3427
			
3427
 
3428
		#檢查圖片檔案是否有產生
3428
		#檢查圖片檔案是否有產生
3429
		#涵式說明:檢查多個檔案與資料夾是否存在.
3429
		#涵式說明:檢查多個檔案與資料夾是否存在.
3430
		#回傳的結果:
3430
		#回傳的結果:
3431
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3431
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3432
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3432
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
Line 3437... Line 3437...
3437
		#參考資料來源:
3437
		#參考資料來源:
3438
		#http://php.net/manual/en/function.file-exists.php
3438
		#http://php.net/manual/en/function.file-exists.php
3439
		#http://php.net/manual/en/control-structures.foreach.php
3439
		#http://php.net/manual/en/control-structures.foreach.php
3440
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3440
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3441
		unset($conf["fileAccess.checkMultiFileExist"]);
3441
		unset($conf["fileAccess.checkMultiFileExist"]);
3442
		
3442
 
3443
		#如果要產生的圖片不存在
3443
		#如果要產生的圖片不存在
3444
		if($fileCheckResult["varExist"][0]=="false"){
3444
		if($fileCheckResult["varExist"][0]=="false"){
3445
			
3445
 
3446
			#設置執行不正常
3446
			#設置執行不正常
3447
			$result["status"]="false";
3447
			$result["status"]="false";
3448
			
3448
 
3449
			#設置執行錯誤訊息
3449
			#設置執行錯誤訊息
3450
			$result["error"]=$fileCheckResult;
3450
			$result["error"]=$fileCheckResult;
3451
			
3451
 
3452
			#回傳結果
3452
			#回傳結果
3453
			return $result;
3453
			return $result;
3454
			
3454
 
3455
			}#if end
3455
			}#if end
3456
			
3456
 
3457
		#取得圖片位置與名稱
3457
		#取得圖片位置與名稱
3458
		$result["img"]=$conf["imgFileName"];
3458
		$result["img"]=$conf["imgFileName"];
3459
			
3459
 
3460
		#函數說明:
3460
		#函數說明:
3461
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
3461
		#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
3462
		#回傳結果:
3462
		#回傳結果:
3463
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3463
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3464
		#$result["error"],錯誤訊息
3464
		#$result["error"],錯誤訊息
3465
		#$result["content"],圖片的連結資訊
3465
		#$result["content"],圖片的連結資訊
3466
		#$result["function"],當前執行的函數名稱 
3466
		#$result["function"],當前執行的函數名稱
3467
		#必填參數:
3467
		#必填參數:
3468
		#$conf["img::data"]["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
3468
		#$conf["img::data"]["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
3469
		$conf["img::data"]["imgPosition"]=$conf["imgFileName"];
3469
		$conf["img::data"]["imgPosition"]=$conf["imgFileName"];
3470
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3470
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3471
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
3471
		$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
Line 3484... Line 3484...
3484
		$conf["img::data"]["delImg"]=$conf["del"];
3484
		$conf["img::data"]["delImg"]=$conf["del"];
3485
		#參考資料:
3485
		#參考資料:
3486
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
3486
		#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
3487
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
3487
		#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
3488
		$data=img::data($conf["img::data"]);
3488
		$data=img::data($conf["img::data"]);
3489
		unset($conf["img::data"]);	
3489
		unset($conf["img::data"]);
3490
			
3490
 
3491
		#如果顯示圖片失敗
3491
		#如果顯示圖片失敗
3492
		if($data["status"]=="false"){
3492
		if($data["status"]=="false"){
3493
			
3493
 
3494
			#設置執行失敗
3494
			#設置執行失敗
3495
			$result["status"]="false";
3495
			$result["status"]="false";
3496
			
3496
 
3497
			#設置執行錯誤訊息
3497
			#設置執行錯誤訊息
3498
			$result["error"]=$data;
3498
			$result["error"]=$data;
3499
			
3499
 
3500
			#回傳結果
3500
			#回傳結果
3501
			return $result;
3501
			return $result;
3502
			
3502
 
3503
			}#if end	
3503
			}#if end
3504
						
3504
 
3505
		#取得顯示圖片的語法
3505
		#取得顯示圖片的語法
3506
		$result["content"]=$data["content"];	
3506
		$result["content"]=$data["content"];
3507
			
3507
 
3508
		#執行到這邊代表執行正常
3508
		#執行到這邊代表執行正常
3509
		$result["status"]="true";
3509
		$result["status"]="true";
3510
		
3510
 
3511
		#回傳結果
3511
		#回傳結果
3512
		return $result;
3512
		return $result;
3513
		
3513
 
3514
		}#function createHist end
3514
		}#function createHist end
3515
	
3515
 
3516
	/*
3516
	/*
3517
	#函式說明:
3517
	#函式說明:
3518
	#運用apriori進行關聯分析,用來分析多個名目變數選項組合預測某個行爲的,支持度,信度,解釋力,分析結果會排除其中一個條件或結果變數爲空值者。
3518
	#運用apriori進行關聯分析,用來分析多個名目變數選項組合預測某個行爲的,支持度,信度,解釋力,分析結果會排除其中一個條件或結果變數爲空值者。
3519
	#回傳結果:
3519
	#回傳結果:
3520
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
3520
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
Line 3550... Line 3550...
3550
	#無.
3550
	#無.
3551
	#備註:
3551
	#備註:
3552
	#無
3552
	#無
3553
	*/
3553
	*/
3554
	public static function apriori(&$conf){
3554
	public static function apriori(&$conf){
3555
		
3555
 
3556
		#初始化要回傳的內容
3556
		#初始化要回傳的內容
3557
		$result=array();
3557
		$result=array();
3558
		
3558
 
3559
		#取得當前函數名稱
3559
		#取得當前函數名稱
3560
		$result["function"]=__FUNCTION__;
3560
		$result["function"]=__FUNCTION__;
3561
		
3561
 
3562
		#如果 $conf 不為陣列
3562
		#如果 $conf 不為陣列
3563
		if(gettype($conf)!="array"){
3563
		if(gettype($conf)!="array"){
3564
			
3564
 
3565
			#設置執行失敗
3565
			#設置執行失敗
3566
			$result["status"]="false";
3566
			$result["status"]="false";
3567
			
3567
 
3568
			#設置執行錯誤訊息
3568
			#設置執行錯誤訊息
3569
			$result["error"][]="\$conf變數須為陣列形態";
3569
			$result["error"][]="\$conf變數須為陣列形態";
3570
 
3570
 
3571
			#如果傳入的參數為 null
3571
			#如果傳入的參數為 null
3572
			if($conf==null){
3572
			if($conf==null){
3573
				
3573
 
3574
				#設置執行錯誤訊息
3574
				#設置執行錯誤訊息
3575
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3575
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3576
				
3576
 
3577
				}#if end
3577
				}#if end
3578
 
3578
 
3579
			#回傳結果
3579
			#回傳結果
3580
			return $result;
3580
			return $result;
3581
			
3581
 
3582
			}#if end
3582
			}#if end
3583
		
3583
 
3584
		#檢查必填參數
3584
		#檢查必填參數
3585
		#涵式說明:
3585
		#涵式說明:
3586
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3586
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
3587
		#回傳的結果:
3587
		#回傳的結果:
3588
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3588
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3594... Line 3594...
3594
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3594
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3595
		#必填寫的參數:
3595
		#必填寫的參數:
3596
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
3596
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
3597
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFile","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3597
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFile","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3598
		#可以省略的參數:
3598
		#可以省略的參數:
3599
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3599
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
3600
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3600
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3601
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
3601
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
3602
		unset($conf["variableCheck.isexistMulti"]);
3602
		unset($conf["variableCheck.isexistMulti"]);
3603
		
3603
 
3604
		#如果檢查失敗
3604
		#如果檢查失敗
3605
		if($checkResult["status"]=="false"){
3605
		if($checkResult["status"]=="false"){
3606
			
3606
 
3607
			#設置執行不正常
3607
			#設置執行不正常
3608
			$result["status"]="false";
3608
			$result["status"]="false";
3609
			
3609
 
3610
			#設置執行錯誤訊息
3610
			#設置執行錯誤訊息
3611
			$result["error"]=$checkResult;
3611
			$result["error"]=$checkResult;
3612
			
3612
 
3613
			#回傳結果
3613
			#回傳結果
3614
			return $result;
3614
			return $result;
3615
			
3615
 
3616
			}#if end
3616
			}#if end
3617
			
3617
 
3618
		#如果檢查不通過
3618
		#如果檢查不通過
3619
		if($checkResult["passed"]=="false"){
3619
		if($checkResult["passed"]=="false"){
3620
			
3620
 
3621
			#設置執行不正常
3621
			#設置執行不正常
3622
			$result["status"]="false";
3622
			$result["status"]="false";
3623
			
3623
 
3624
			#設置執行錯誤訊息
3624
			#設置執行錯誤訊息
3625
			$result["error"]=$checkResult;
3625
			$result["error"]=$checkResult;
3626
			
3626
 
3627
			#回傳結果
3627
			#回傳結果
3628
			return $result;
3628
			return $result;
3629
			
3629
 
3630
			}#if end
3630
			}#if end
3631
		
3631
 
3632
		#檢查可省略的參數
3632
		#檢查可省略的參數
3633
		#函式說明:
3633
		#函式說明:
3634
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
3634
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
3635
		#回傳結果:
3635
		#回傳結果:
3636
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3636
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3650... Line 3650...
3650
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
3650
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
3651
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/hist-".$_SESSION["username"].".png"," ","區間","頻率");
3651
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/hist-".$_SESSION["username"].".png"," ","區間","頻率");
3652
		#無
3652
		#無
3653
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
3653
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
3654
		unset($conf["variableCheck.checkSkipableVarType"]);
3654
		unset($conf["variableCheck.checkSkipableVarType"]);
3655
		
3655
 
3656
		#如果檢查失敗
3656
		#如果檢查失敗
3657
		if($checkResult["status"]=="false"){
3657
		if($checkResult["status"]=="false"){
3658
			
3658
 
3659
			#設置執行不正常
3659
			#設置執行不正常
3660
			$result["status"]="false";
3660
			$result["status"]="false";
3661
			
3661
 
3662
			#設置執行錯誤訊息
3662
			#設置執行錯誤訊息
3663
			$result["error"]=$checkResult;
3663
			$result["error"]=$checkResult;
3664
			
3664
 
3665
			#回傳結果
3665
			#回傳結果
3666
			return $result;
3666
			return $result;
3667
			
3667
 
3668
			}#if end
3668
			}#if end
3669
			
3669
 
3670
		#如果檢查不通過
3670
		#如果檢查不通過
3671
		if($checkResult["passed"]=="false"){
3671
		if($checkResult["passed"]=="false"){
3672
			
3672
 
3673
			#設置執行不正常
3673
			#設置執行不正常
3674
			$result["status"]="false";
3674
			$result["status"]="false";
3675
			
3675
 
3676
			#設置執行錯誤訊息
3676
			#設置執行錯誤訊息
3677
			$result["error"]=$checkResult;
3677
			$result["error"]=$checkResult;
3678
			
3678
 
3679
			#回傳結果
3679
			#回傳結果
3680
			return $result;
3680
			return $result;
3681
			
3681
 
3682
			}#if end
3682
			}#if end
3683
		
3683
 
3684
		#讀取csv檔標題欄位的內容
3684
		#讀取csv檔標題欄位的內容
3685
		#涵式說明:
3685
		#涵式說明:
3686
		#讀取csv檔案的內容
3686
		#讀取csv檔案的內容
3687
		#回傳得結果:
3687
		#回傳得結果:
3688
		#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
3688
		#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
Line 3702... Line 3702...
3702
		#http://www.php.net/manual/en/function.str-split.php
3702
		#http://www.php.net/manual/en/function.str-split.php
3703
		#參考資料來源
3703
		#參考資料來源
3704
		#http://php.net/manual/en/function.fgetcsv.php
3704
		#http://php.net/manual/en/function.fgetcsv.php
3705
		$readCsvResult=csv::read($conf["csv.read"]);
3705
		$readCsvResult=csv::read($conf["csv.read"]);
3706
		unset($conf["csv.read"]);
3706
		unset($conf["csv.read"]);
3707
		
3707
 
3708
		#如果讀取csv檔,失敗
3708
		#如果讀取csv檔,失敗
3709
		if($readCsvResult["status"]=="false"){
3709
		if($readCsvResult["status"]=="false"){
3710
			
3710
 
3711
			#設置執行不正常
3711
			#設置執行不正常
3712
			$result["status"]="false";
3712
			$result["status"]="false";
3713
			
3713
 
3714
			#設置執行錯誤訊息
3714
			#設置執行錯誤訊息
3715
			$result["error"]=$readCsvResult;
3715
			$result["error"]=$readCsvResult;
3716
			
3716
 
3717
			#回傳結果
3717
			#回傳結果
3718
			return $result;
3718
			return $result;
3719
			
3719
 
3720
			}#if end
3720
			}#if end
3721
		
3721
 
3722
		#如果欄位數量沒有大於2
3722
		#如果欄位數量沒有大於2
3723
		if(count($readCsvResult["title"])<=2){
3723
		if(count($readCsvResult["title"])<=2){
3724
			
3724
 
3725
			#設置執行不正常
3725
			#設置執行不正常
3726
			$result["status"]="false";
3726
			$result["status"]="false";
3727
			
3727
 
3728
			#設置執行錯誤訊息
3728
			#設置執行錯誤訊息
3729
			$result["error"]="csv檔案的欄位數量須大於2";
3729
			$result["error"]="csv檔案的欄位數量須大於2";
3730
			
3730
 
3731
			#回傳結果
3731
			#回傳結果
3732
			return $result;
3732
			return $result;
3733
			
3733
 
3734
			}#if end
3734
			}#if end
3735
		
3735
 
3736
		#取得標題欄位的內容
3736
		#取得標題欄位的內容
3737
		$columnTitle=$readCsvResult["title"];
3737
		$columnTitle=$readCsvResult["title"];
3738
		
3738
 
3739
		#初始化更新標題欄位的R語法
3739
		#初始化更新標題欄位的R語法
3740
		$updateColumnsNameStr="colnames(data)<-c(";
3740
		$updateColumnsNameStr="colnames(data)<-c(";
3741
		
3741
 
3742
		#執行 $columnTitle 的數量次數回圈
3742
		#執行 $columnTitle 的數量次數回圈
3743
		for($i=0;$i<count($columnTitle);$i++){
3743
		for($i=0;$i<count($columnTitle);$i++){
3744
			
3744
 
3745
			#如果不是最後一個標題
3745
			#如果不是最後一個標題
3746
			if($i!=count($columnTitle)-1){
3746
			if($i!=count($columnTitle)-1){
3747
			
3747
 
3748
				#串接標題名稱與逗號
3748
				#串接標題名稱與逗號
3749
				$updateColumnsNameStr=$updateColumnsNameStr."\"".$columnTitle[$i]."\",";
3749
				$updateColumnsNameStr=$updateColumnsNameStr."\"".$columnTitle[$i]."\",";
3750
			
3750
 
3751
				}#if end
3751
				}#if end
3752
				
3752
 
3753
			#反之爲最後一個標題
3753
			#反之爲最後一個標題
3754
			else{
3754
			else{
3755
				
3755
 
3756
				#串接標題名稱與「)」
3756
				#串接標題名稱與「)」
3757
				$updateColumnsNameStr=$updateColumnsNameStr."\"".$columnTitle[$i]."\")";
3757
				$updateColumnsNameStr=$updateColumnsNameStr."\"".$columnTitle[$i]."\")";
3758
				
3758
 
3759
				}#else end
3759
				}#else end
3760
			
3760
 
3761
			}#for end
3761
			}#for end
3762
		
3762
 
3763
		#初始化要寫入到R腳本的逐行內容
3763
		#初始化要寫入到R腳本的逐行內容
3764
		$dataToWrite=array();
3764
		$dataToWrite=array();
3765
		
3765
 
3766
		#設置要寫到R腳本的資料
3766
		#設置要寫到R腳本的資料
3767
		$dataToWrite[]="#資料探堪-關聯分析-apriori";
3767
		$dataToWrite[]="#資料探堪-關聯分析-apriori";
3768
		$dataToWrite[]="";
3768
		$dataToWrite[]="";
3769
		$dataToWrite[]="#匯入 arules 套件";
3769
		$dataToWrite[]="#匯入 arules 套件";
3770
		$dataToWrite[]="library(arules)";
3770
		$dataToWrite[]="library(arules)";
Line 3773... Line 3773...
3773
		$dataToWrite[]="data=read.csv(\"".$conf["csvFile"]."\")";
3773
		$dataToWrite[]="data=read.csv(\"".$conf["csvFile"]."\")";
3774
		$dataToWrite[]="";
3774
		$dataToWrite[]="";
3775
		$dataToWrite[]="#更新欄位變數內容";
3775
		$dataToWrite[]="#更新欄位變數內容";
3776
		$dataToWrite[]=$updateColumnsNameStr;
3776
		$dataToWrite[]=$updateColumnsNameStr;
3777
		$dataToWrite[]="";
3777
		$dataToWrite[]="";
3778
		
3778
 
3779
		#初始化 aprior 的 param 字串
3779
		#初始化 aprior 的 param 字串
3780
		$parameter="parameter=list(minlen=2";
3780
		$parameter="parameter=list(minlen=2";
3781
		
3781
 
3782
		#如果存在 $conf["support"]
3782
		#如果存在 $conf["support"]
3783
		if(isset($conf["support"])){
3783
		if(isset($conf["support"])){
3784
			
3784
 
3785
			#設置最低支持度
3785
			#設置最低支持度
3786
			$parameter=$parameter.",support=".$conf["support"];
3786
			$parameter=$parameter.",support=".$conf["support"];
3787
			
3787
 
3788
			}#if end
3788
			}#if end
3789
			
3789
 
3790
		#如果存在 $conf["confidence"]
3790
		#如果存在 $conf["confidence"]
3791
		if(isset($conf["confidence"])){
3791
		if(isset($conf["confidence"])){
3792
			
3792
 
3793
			#設置最低信度
3793
			#設置最低信度
3794
			$parameter=$parameter.",confidence=".$conf["confidence"];
3794
			$parameter=$parameter.",confidence=".$conf["confidence"];
3795
			
3795
 
3796
			}#if end		
3796
			}#if end
3797
			
3797
 
3798
		#結束 param 字串
3798
		#結束 param 字串
3799
		$parameter=$parameter.")";
3799
		$parameter=$parameter.")";
3800
		
3800
 
3801
		#如果有指定預測結果的變數與其數值內容
3801
		#如果有指定預測結果的變數與其數值內容
3802
		if(isset($conf["forecastVarName"]) && isset($conf["forecastVarValueArray"])){
3802
		if(isset($conf["forecastVarName"]) && isset($conf["forecastVarValueArray"])){
3803
			
3803
 
3804
			#如果 $conf["forecastVarValueArray"] 的元素數量小於 2
3804
			#如果 $conf["forecastVarValueArray"] 的元素數量小於 2
3805
			if(count($conf["forecastVarValueArray"])<2){
3805
			if(count($conf["forecastVarValueArray"])<2){
3806
				
3806
 
3807
				#設置執行錯誤
3807
				#設置執行錯誤
3808
				$result["status"]="false";
3808
				$result["status"]="false";
3809
				
3809
 
3810
				#設置執行錯誤訊息
3810
				#設置執行錯誤訊息
3811
				$result["error"][]="變數 \"forecastVarValueArray\"(apriori的RHS)至少需要兩個項目";
3811
				$result["error"][]="變數 \"forecastVarValueArray\"(apriori的RHS)至少需要兩個項目";
3812
				
3812
 
3813
				#回傳結果
3813
				#回傳結果
3814
				return $result;
3814
				return $result;
3815
				
3815
 
3816
				}#if end
3816
				}#if end
3817
			
3817
 
3818
			#建立皆為 $conf["forecastVarName"] 的陣列
3818
			#建立皆為 $conf["forecastVarName"] 的陣列
3819
			#函式說明:
3819
			#函式說明:
3820
			#建立一個陣列,可以指派陣列的內容,然後回傳
3820
			#建立一個陣列,可以指派陣列的內容,然後回傳
3821
			#回傳的結果:
3821
			#回傳的結果:
3822
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3822
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3828... Line 3828...
3828
			#可省略的參數:
3828
			#可省略的參數:
3829
			$conf["arrays::create"]["arrayCounts"]=count($conf["forecastVarValueArray"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
3829
			$conf["arrays::create"]["arrayCounts"]=count($conf["forecastVarValueArray"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
3830
			$conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
3830
			$conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
3831
			$forecastVarNameArray=arrays::create($conf["arrays::create"]);
3831
			$forecastVarNameArray=arrays::create($conf["arrays::create"]);
3832
			unset($conf["arrays::create"]);
3832
			unset($conf["arrays::create"]);
3833
			
3833
 
3834
			#如果建立 皆為 $conf["forecastVarName"] 的陣列失敗
3834
			#如果建立 皆為 $conf["forecastVarName"] 的陣列失敗
3835
			if($forecastVarNameArray["status"]=="false"){
3835
			if($forecastVarNameArray["status"]=="false"){
3836
				
3836
 
3837
				#設置執行不正常
3837
				#設置執行不正常
3838
				$result["status"]="false";
3838
				$result["status"]="false";
3839
				
3839
 
3840
				#設置執行錯誤訊息
3840
				#設置執行錯誤訊息
3841
				$result["error"]=$forecastVarNameArray;
3841
				$result["error"]=$forecastVarNameArray;
3842
				
3842
 
3843
				#回傳結果
3843
				#回傳結果
3844
				return $result;
3844
				return $result;
3845
				
3845
 
3846
				}#if end
3846
				}#if end
3847
			
3847
 
3848
			#建立皆為 「=」 的陣列
3848
			#建立皆為 「=」 的陣列
3849
			#函式說明:
3849
			#函式說明:
3850
			#建立一個陣列,可以指派陣列的內容,然後回傳
3850
			#建立一個陣列,可以指派陣列的內容,然後回傳
3851
			#回傳的結果:
3851
			#回傳的結果:
3852
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3852
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 3858... Line 3858...
3858
			#可省略的參數:
3858
			#可省略的參數:
3859
			$conf["arrays::create"]["arrayCounts"]=count($conf["forecastVarValueArray"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
3859
			$conf["arrays::create"]["arrayCounts"]=count($conf["forecastVarValueArray"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
3860
			$conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
3860
			$conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
3861
			$equalArray=arrays::create($conf["arrays::create"]);
3861
			$equalArray=arrays::create($conf["arrays::create"]);
3862
			unset($conf["arrays::create"]);
3862
			unset($conf["arrays::create"]);
3863
			
3863
 
3864
			#如果建立 皆為「=」的陣列失敗
3864
			#如果建立 皆為「=」的陣列失敗
3865
			if($equalArray["status"]=="false"){
3865
			if($equalArray["status"]=="false"){
3866
				
3866
 
3867
				#設置執行不正常
3867
				#設置執行不正常
3868
				$result["status"]="false";
3868
				$result["status"]="false";
3869
				
3869
 
3870
				#設置執行錯誤訊息
3870
				#設置執行錯誤訊息
3871
				$result["error"]=$equalArray;
3871
				$result["error"]=$equalArray;
3872
				
3872
 
3873
				#回傳結果
3873
				#回傳結果
3874
				return $result;
3874
				return $result;
3875
				
3875
 
3876
				}#if end
3876
				}#if end
3877
			
3877
 
3878
			#將 指定預測結果的變數與其數值內容 合併成一維陣列
3878
			#將 指定預測結果的變數與其數值內容 合併成一維陣列
3879
			#函式說明:
3879
			#函式說明:
3880
			#透過多個擁有一樣數量元素的一維陣列,透過指定的連接字串,組成一組同樣數量的一維陣列。
3880
			#透過多個擁有一樣數量元素的一維陣列,透過指定的連接字串,組成一組同樣數量的一維陣列。
3881
			#回傳結果:
3881
			#回傳結果:
3882
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常。
3882
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常。
Line 3889... Line 3889...
3889
			#可省略參數:
3889
			#可省略參數:
3890
			#$conf["R::combineToNewArray"]["combineSymbolArray"],陣列字串,數量爲$conf["arrays"]減一,爲用於連結各一維陣列變數的連接字串,預設皆爲"<=>"。
3890
			#$conf["R::combineToNewArray"]["combineSymbolArray"],陣列字串,數量爲$conf["arrays"]減一,爲用於連結各一維陣列變數的連接字串,預設皆爲"<=>"。
3891
			$conf["R::combineToNewArray"]["combineSymbolArray"]=$equalArray["content"];
3891
			$conf["R::combineToNewArray"]["combineSymbolArray"]=$equalArray["content"];
3892
			$combineToNewArray=arrays::combineToNewArray($conf["R::combineToNewArray"]);
3892
			$combineToNewArray=arrays::combineToNewArray($conf["R::combineToNewArray"]);
3893
			unset($conf["R::combineToNewArray"]);
3893
			unset($conf["R::combineToNewArray"]);
3894
						
3894
 
3895
			#如果合併兩個一維陣列失敗
3895
			#如果合併兩個一維陣列失敗
3896
			if($combineToNewArray["status"]=="false"){
3896
			if($combineToNewArray["status"]=="false"){
3897
				
3897
 
3898
				#設置執行不正常
3898
				#設置執行不正常
3899
				$result["status"]="false";
3899
				$result["status"]="false";
3900
				
3900
 
3901
				#設置執行錯誤訊息
3901
				#設置執行錯誤訊息
3902
				$result["error"]=$combineToNewArray;
3902
				$result["error"]=$combineToNewArray;
3903
				
3903
 
3904
				#回傳結果
3904
				#回傳結果
3905
				return $result;
3905
				return $result;
3906
				
3906
 
3907
				}#if end					
3907
				}#if end
3908
			
3908
 
3909
			#組裝 $conf["forecastVarNameArray"] 與 $conf["forecastVarValueArray"] 為 $appearance
3909
			#組裝 $conf["forecastVarNameArray"] 與 $conf["forecastVarValueArray"] 為 $appearance
3910
			#涵式說明:
3910
			#涵式說明:
3911
			#避免超出4096bytes限制的條件下產生向量變數語法
3911
			#避免超出4096bytes限制的條件下產生向量變數語法
3912
			#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
3912
			#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
3913
			#回傳結果:
3913
			#回傳結果:
Line 3923... Line 3923...
3923
			$conf["R::createFixedVectorVar"]["vectorData"]=$combineToNewArray["content"];
3923
			$conf["R::createFixedVectorVar"]["vectorData"]=$combineToNewArray["content"];
3924
			#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
3924
			#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
3925
			$conf["R::createFixedVectorVar"]["writeTarget"]=&$dataToWrite;
3925
			$conf["R::createFixedVectorVar"]["writeTarget"]=&$dataToWrite;
3926
			$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
3926
			$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
3927
			unset($conf["R::createFixedVectorVar"]);
3927
			unset($conf["R::createFixedVectorVar"]);
3928
			
3928
 
3929
			#如果建立向量變數失敗
3929
			#如果建立向量變數失敗
3930
			if($createFixedVectorVar["status"]=="false"){
3930
			if($createFixedVectorVar["status"]=="false"){
3931
				
3931
 
3932
				#設置執行不正常
3932
				#設置執行不正常
3933
				$result["status"]="false";
3933
				$result["status"]="false";
3934
				
3934
 
3935
				#設置執行錯誤訊息
3935
				#設置執行錯誤訊息
3936
				$result["error"]=$createFixedVectorVar;
3936
				$result["error"]=$createFixedVectorVar;
3937
				
3937
 
3938
				#回傳結果
3938
				#回傳結果
3939
				return $result;
3939
				return $result;
3940
				
3940
 
3941
				}#if end
3941
				}#if end
3942
			
3942
 
3943
			$dataToWrite[]="#使用 apriori 對data進行資料探堪 並將所有規則存在 rules";
3943
			$dataToWrite[]="#使用 apriori 對data進行資料探堪 並將所有規則存在 rules";
3944
			$dataToWrite[]="#control = list(verbose=F)代表不顯示一些過程資訊";
3944
			$dataToWrite[]="#control = list(verbose=F)代表不顯示一些過程資訊";
3945
			$dataToWrite[]="#parameter = list(minlen=2)代表P(A)與P(B)不能爲空集合";
3945
			$dataToWrite[]="#parameter = list(minlen=2)代表P(A)與P(B)不能爲空集合";
3946
			$dataToWrite[]="#appearance = list(rhs=c(\"Survived=No\", \"Survived=Yes\"),default=\"lhs\")代表結果變數Survived必須為\"No\"或 \"Yes\",原因變數不限定.";
3946
			$dataToWrite[]="#appearance = list(rhs=c(\"Survived=No\", \"Survived=Yes\"),default=\"lhs\")代表結果變數Survived必須為\"No\"或 \"Yes\",原因變數不限定.";
3947
			$dataToWrite[]="rules<-apriori(data,control = list(verbose=F),".$parameter.",appearance=list(rhs=rhsCondition,default=\"lhs\"))";
3947
			$dataToWrite[]="rules<-apriori(data,control = list(verbose=F),".$parameter.",appearance=list(rhs=rhsCondition,default=\"lhs\"))";
3948
								
3948
 
3949
			}#if end
3949
			}#if end
3950
		
3950
 
3951
		#反之沒有指定
3951
		#反之沒有指定
3952
		else{
3952
		else{
3953
			
3953
 
3954
			$dataToWrite[]="#使用 apriori 對data進行資料探堪 並將所有規則存在 rules";
3954
			$dataToWrite[]="#使用 apriori 對data進行資料探堪 並將所有規則存在 rules";
3955
			$dataToWrite[]="#control = list(verbose=F)代表不顯示一些過程資訊";
3955
			$dataToWrite[]="#control = list(verbose=F)代表不顯示一些過程資訊";
3956
			$dataToWrite[]="#parameter = list(minlen=2)代表P(A)與P(B)不能爲空集合";
3956
			$dataToWrite[]="#parameter = list(minlen=2)代表P(A)與P(B)不能爲空集合";
3957
			$dataToWrite[]="rules<-apriori(data,control = list(verbose=F),".$parameter.")";
3957
			$dataToWrite[]="rules<-apriori(data,control = list(verbose=F),".$parameter.")";
3958
					
3958
 
3959
			}#else end
3959
			}#else end
3960
		
3960
 
3961
		$dataToWrite[]="";
3961
		$dataToWrite[]="";
3962
		$dataToWrite[]="#檢示總共找到幾條規則rules";
3962
		$dataToWrite[]="#檢示總共找到幾條規則rules";
3963
		$dataToWrite[]="rules";
3963
		$dataToWrite[]="rules";
3964
		$dataToWrite[]="";
3964
		$dataToWrite[]="";
3965
		$dataToWrite[]="#設定規則的 support confidence lift 比例到小數點後三位就好";
3965
		$dataToWrite[]="#設定規則的 support confidence lift 比例到小數點後三位就好";
Line 3968... Line 3968...
3968
		$dataToWrite[]="#排序規則的順序,用lift來排,預設爲遞減排序。";
3968
		$dataToWrite[]="#排序規則的順序,用lift來排,預設爲遞減排序。";
3969
		$dataToWrite[]="rules.sorted<-sort(rules,by=\"lift\")";
3969
		$dataToWrite[]="rules.sorted<-sort(rules,by=\"lift\")";
3970
		$dataToWrite[]="";
3970
		$dataToWrite[]="";
3971
		$dataToWrite[]="#檢示所有規則的資料";
3971
		$dataToWrite[]="#檢示所有規則的資料";
3972
		$dataToWrite[]="inspect(rules.sorted)";
3972
		$dataToWrite[]="inspect(rules.sorted)";
3973
		
3973
 
3974
		#涵式說明:
3974
		#涵式說明:
3975
		#建立R檔案
3975
		#建立R檔案
3976
		#回傳的結果:
3976
		#回傳的結果:
3977
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3977
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3978
		#$result["error"],錯誤訊息陣列.
3978
		#$result["error"],錯誤訊息陣列.
3979
		#$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
3979
		#$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
3980
		#必填的參數:
3980
		#必填的參數:
3981
		if(!isset($_SESSION))
3981
		if(!isset($_SESSION))
3982
		{					
3982
		{
3983
			$conf["R.writeRfile"]["addAndName"]=".R/".$_SERVER["USER"]."-apriori.R";#R檔案的位置與名稱
3983
			$conf["R.writeRfile"]["addAndName"]=".R/".$_SERVER["USER"]."-apriori.R";#R檔案的位置與名稱
3984
		}
3984
		}
3985
		else if(isset($_SESSION["username"]))
3985
		else if(isset($_SESSION["username"]))
3986
		{
3986
		{
3987
			$conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-apriori.R";#R檔案的位置與名稱
3987
			$conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-apriori.R";#R檔案的位置與名稱
3988
		}
3988
		}
3989
		else
3989
		else
3990
		{
3990
		{
3991
			#取得系統時間
3991
			#取得系統時間
3992
			$unixTime=time::getMicrotime();
3992
			$unixTime=time::getMicrotime();
3993
			
3993
 
3994
			$conf["R.writeRfile"]["addAndName"]=".R/".$unixTime."-apriori.R";#R檔案的位置與名稱
3994
			$conf["R.writeRfile"]["addAndName"]=".R/".$unixTime."-apriori.R";#R檔案的位置與名稱
3995
		}
3995
		}
3996
		$conf["R.writeRfile"]["textToWrite"]=$dataToWrite;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
3996
		$conf["R.writeRfile"]["textToWrite"]=$dataToWrite;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
3997
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3997
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3998
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
3998
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
3999
		$writeRfileResult=R::writeRfile($conf["R.writeRfile"]);
3999
		$writeRfileResult=R::writeRfile($conf["R.writeRfile"]);
4000
		unset($conf["R.writeRfile"]);
4000
		unset($conf["R.writeRfile"]);
4001
		
4001
 
4002
		#移除暫存的R腳本內容變數
4002
		#移除暫存的R腳本內容變數
4003
		unset($dataToWrite);
4003
		unset($dataToWrite);
4004
		
4004
 
4005
		#如果 R 腳本寫入失敗
4005
		#如果 R 腳本寫入失敗
4006
		if($writeRfileResult["status"]=="false"){
4006
		if($writeRfileResult["status"]=="false"){
4007
			
4007
 
4008
			#設置執行不正常
4008
			#設置執行不正常
4009
			$result["status"]="false";
4009
			$result["status"]="false";
4010
			
4010
 
4011
			#設置錯誤訊息
4011
			#設置錯誤訊息
4012
			$result["error"]=$writeRfileResult;
4012
			$result["error"]=$writeRfileResult;
4013
			
4013
 
4014
			#回傳結果
4014
			#回傳結果
4015
			return $result;
4015
			return $result;
4016
			
4016
 
4017
			}#if end
4017
			}#if end
4018
			
4018
 
4019
		#取得R腳本的位置
4019
		#取得R腳本的位置
4020
		$rScriptAdd=$writeRfileResult["newCreatedRfilePathAndName"];
4020
		$rScriptAdd=$writeRfileResult["newCreatedRfilePathAndName"];
4021
		
4021
 
4022
		#執行R腳本
4022
		#執行R腳本
4023
		#函式說明:
4023
		#函式說明:
4024
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
4024
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
4025
		#回傳的結果:
4025
		#回傳的結果:
4026
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4026
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4035... Line 4035...
4035
		#可省略的參數:
4035
		#可省略的參數:
4036
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
4036
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
4037
		#$conf["R.executeR"]["disbaleOptimal"]="true";
4037
		#$conf["R.executeR"]["disbaleOptimal"]="true";
4038
		$executeResult=R::executeR($conf["R.executeR"]);
4038
		$executeResult=R::executeR($conf["R.executeR"]);
4039
		unset($conf["R.executeR"]);
4039
		unset($conf["R.executeR"]);
4040
		
4040
 
4041
		#如果執行R腳本出錯
4041
		#如果執行R腳本出錯
4042
		if($executeResult["status"]=="false"){
4042
		if($executeResult["status"]=="false"){
4043
			
4043
 
4044
			#設置執行不正常
4044
			#設置執行不正常
4045
			$result["status"]="false";
4045
			$result["status"]="false";
4046
			
4046
 
4047
			#設置錯誤訊息
4047
			#設置錯誤訊息
4048
			$result["error"]=$executeResult;
4048
			$result["error"]=$executeResult;
4049
			
4049
 
4050
			#回傳結果
4050
			#回傳結果
4051
			return $result;
4051
			return $result;
4052
			
4052
 
4053
			}#if end
4053
			}#if end
4054
		
4054
 
4055
		#取得執行R後的輸出
4055
		#取得執行R後的輸出
4056
		$result["oriOutPut"]=$executeResult;
4056
		$result["oriOutPut"]=$executeResult;
4057
		
4057
 
4058
		#初始化記錄規則的陣列變數
4058
		#初始化記錄規則的陣列變數
4059
		$rulesArray=array();
4059
		$rulesArray=array();
4060
		
4060
 
4061
		#初始化儲存規則計數的數字
4061
		#初始化儲存規則計數的數字
4062
		$rulesNum=0;
4062
		$rulesNum=0;
4063
		
4063
 
4064
		#初始化暫存lhs條件的陣列變數
4064
		#初始化暫存lhs條件的陣列變數
4065
		$lhsNameArrays=array();
4065
		$lhsNameArrays=array();
4066
		$lhsValueArrays=array();
4066
		$lhsValueArrays=array();
4067
			
4067
 
4068
		#初始化分析資料的列是從第幾列開始
4068
		#初始化分析資料的列是從第幾列開始
4069
		$rulesLineStart=28; 	
4069
		$rulesLineStart=28;
4070
			
4070
 
4071
		#如果有指定預測結果的變數與其數值內容
4071
		#如果有指定預測結果的變數與其數值內容
4072
		if(isset($conf["forecastVarName"]) && isset($conf["forecastVarValueArray"])){
4072
		if(isset($conf["forecastVarName"]) && isset($conf["forecastVarValueArray"])){
4073
			
4073
 
4074
			#設置分析資料的列是從第31列開始
4074
			#設置分析資料的列是從第31列開始
4075
			$rulesLineStart=$rulesLineStart+$createFixedVectorVar["lineCount"]+1;
4075
			$rulesLineStart=$rulesLineStart+$createFixedVectorVar["lineCount"]+1;
4076
							
4076
 
4077
			}#if end				
4077
			}#if end
4078
							
4078
 
4079
		#依據每行的輸出結果
4079
		#依據每行的輸出結果
4080
		for($i=$rulesLineStart;$i<$executeResult["lineCount"]-1;$i++){
4080
		for($i=$rulesLineStart;$i<$executeResult["lineCount"]-1;$i++){
4081
				
4081
 
4082
			#如果分析資料的開始列為 "NULL"
4082
			#如果分析資料的開始列為 "NULL"
4083
			if($executeResult["lineArray"][$rulesLineStart]=="NULL"){
4083
			if($executeResult["lineArray"][$rulesLineStart]=="NULL"){
4084
				
4084
 
4085
				#設置執行正常
4085
				#設置執行正常
4086
				$result["status"]="true";
4086
				$result["status"]="true";
4087
				
4087
 
4088
				#取得規則內容
4088
				#取得規則內容
4089
				$result["content"]["rulesArray"]=array();
4089
				$result["content"]["rulesArray"]=array();
4090
				
4090
 
4091
				#設置規則筆數
4091
				#設置規則筆數
4092
				$result["content"]["rulesCount"]=0;
4092
				$result["content"]["rulesCount"]=0;
4093
				
4093
 
4094
				#回傳結果
4094
				#回傳結果
4095
				return $result;
4095
				return $result;
4096
				
4096
 
4097
				}#if end	
4097
				}#if end
4098
					
4098
 
4099
			#用空格區分,看第一個是否為關聯規則的筆數.
4099
			#用空格區分,看第一個是否為關聯規則的筆數.
4100
			#涵式說明:
4100
			#涵式說明:
4101
			#將固定格式的字串分開,並回傳分開的結果。
4101
			#將固定格式的字串分開,並回傳分開的結果。
4102
			#回傳的參數:
4102
			#回傳的參數:
4103
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4103
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4110... Line 4110...
4110
			$conf["stringProcess::spiltString"]["stringIn"]=$executeResult["lineArray"][$i];#要處理的字串。
4110
			$conf["stringProcess::spiltString"]["stringIn"]=$executeResult["lineArray"][$i];#要處理的字串。
4111
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4111
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4112
			#備註:
4112
			#備註:
4113
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
4113
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
4114
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4114
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4115
			unset($conf["stringProcess::spiltString"]);	
4115
			unset($conf["stringProcess::spiltString"]);
4116
						
4116
 
4117
			#如果分割字串失敗
4117
			#如果分割字串失敗
4118
			if($spiltString["status"]=="false"){
4118
			if($spiltString["status"]=="false"){
4119
				
4119
 
4120
				#設置執行不正常
4120
				#設置執行不正常
4121
				$result["status"]="false";
4121
				$result["status"]="false";
4122
				
4122
 
4123
				#設置錯誤訊息
4123
				#設置錯誤訊息
4124
				$result["error"]=$spiltString;
4124
				$result["error"]=$spiltString;
4125
				
4125
 
4126
				#回傳結果
4126
				#回傳結果
4127
				return $result;
4127
				return $result;
4128
				
4128
 
4129
				}#if end			
4129
				}#if end
4130
						
4130
 
4131
			#如果分割好的第一段是 ($rulesNum+1) 則代表新的規則開始
4131
			#如果分割好的第一段是 ($rulesNum+1) 則代表新的規則開始
4132
			if($spiltString["dataArray"][0]==$rulesNum+1){
4132
			if($spiltString["dataArray"][0]==$rulesNum+1){
4133
					
4133
 
4134
				#規則加1
4134
				#規則加1
4135
				$rulesNum++;
4135
				$rulesNum++;
4136
			
4136
 
4137
				}#if end
4137
				}#if end
4138
						
4138
 
4139
			#如果有讀到 「=>」 則代表是當前規則的結束
4139
			#如果有讀到 「=>」 則代表是當前規則的結束
4140
			#函式說明:
4140
			#函式說明:
4141
			#檢查字串裡面有無指定的關鍵字
4141
			#檢查字串裡面有無指定的關鍵字
4142
			#回傳的結果:
4142
			#回傳的結果:
4143
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4143
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 4148... Line 4148...
4148
			$conf["search.findKeyWord"]["keyWord"]="=>";#想要搜尋的關鍵字
4148
			$conf["search.findKeyWord"]["keyWord"]="=>";#想要搜尋的關鍵字
4149
			$conf["search.findKeyWord"]["string"]=$executeResult["lineArray"][$i];#要被搜尋的字串內容
4149
			$conf["search.findKeyWord"]["string"]=$executeResult["lineArray"][$i];#要被搜尋的字串內容
4150
			#可省略的參數:
4150
			#可省略的參數:
4151
			#$conf["search.findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
4151
			#$conf["search.findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
4152
			$searchResult=search::findKeyWord($conf["search.findKeyWord"]);
4152
			$searchResult=search::findKeyWord($conf["search.findKeyWord"]);
4153
			unset($conf["search.findKeyWord"]);	
4153
			unset($conf["search.findKeyWord"]);
4154
						
4154
 
4155
			#如果 $searchResult["status"] 等於 "false"
4155
			#如果 $searchResult["status"] 等於 "false"
4156
			if($searchResult["status"]=="false"){
4156
			if($searchResult["status"]=="false"){
4157
				
4157
 
4158
				#設置執行不正常
4158
				#設置執行不正常
4159
				$result["status"]="false";
4159
				$result["status"]="false";
4160
				
4160
 
4161
				#設置錯誤訊息
4161
				#設置錯誤訊息
4162
				$result["error"]=$searchResult;
4162
				$result["error"]=$searchResult;
4163
				
4163
 
4164
				#回傳結果
4164
				#回傳結果
4165
				return $result;
4165
				return $result;
4166
				
4166
 
4167
				}#if end	
4167
				}#if end
4168
									
4168
 
4169
			#如果有找到關鍵字
4169
			#如果有找到關鍵字
4170
			if($searchResult["founded"]=="true"){
4170
			if($searchResult["founded"]=="true"){
4171
				
4171
 
4172
				#解析原因與導致的結果字串
4172
				#解析原因與導致的結果字串
4173
								
4173
 
4174
				#涵式說明:
4174
				#涵式說明:
4175
				#將固定格式的字串分開,並回傳分開的結果。
4175
				#將固定格式的字串分開,並回傳分開的結果。
4176
				#回傳的參數:
4176
				#回傳的參數:
4177
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4177
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4178
				#$result["error"],錯誤訊息陣列
4178
				#$result["error"],錯誤訊息陣列
Line 4182... Line 4182...
4182
				#必填的參數:
4182
				#必填的參數:
4183
				$conf["stringProcess.spiltString"]["stringIn"]=$executeResult["lineArray"][$i];#要處理的字串。
4183
				$conf["stringProcess.spiltString"]["stringIn"]=$executeResult["lineArray"][$i];#要處理的字串。
4184
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=>";#爲以哪個符號作爲分割
4184
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=>";#爲以哪個符號作爲分割
4185
				$rulesStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4185
				$rulesStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4186
				unset($conf["stringProcess.spiltString"]);
4186
				unset($conf["stringProcess.spiltString"]);
4187
				
4187
 
4188
				#如果處理結果字串出錯
4188
				#如果處理結果字串出錯
4189
				if($rulesStr["status"]=="false"){
4189
				if($rulesStr["status"]=="false"){
4190
					
4190
 
4191
					#設置執行不正常
4191
					#設置執行不正常
4192
					$result["status"]="false";
4192
					$result["status"]="false";
4193
					
4193
 
4194
					#設置錯誤訊息
4194
					#設置錯誤訊息
4195
					$result["error"]=$rulesStr;
4195
					$result["error"]=$rulesStr;
4196
					
4196
 
4197
					#回傳結果
4197
					#回傳結果
4198
					return $result;
4198
					return $result;
4199
					
4199
 
4200
					}#if end
4200
					}#if end
4201
				
4201
 
4202
				#取得原因字串	
4202
				#取得原因字串
4203
				$factorStr=$rulesStr["dataArray"][0];
4203
				$factorStr=$rulesStr["dataArray"][0];
4204
				
4204
 
4205
				#取得結果字串
4205
				#取得結果字串
4206
				$resultStr=$rulesStr["dataArray"][1];
4206
				$resultStr=$rulesStr["dataArray"][1];
4207
				
4207
 
4208
				#解析原因字串的變數名稱與其數值
4208
				#解析原因字串的變數名稱與其數值
4209
				#涵式說明:
4209
				#涵式說明:
4210
				#將固定格式的字串分開,並回傳分開的結果。
4210
				#將固定格式的字串分開,並回傳分開的結果。
4211
				#回傳的參數:
4211
				#回傳的參數:
4212
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4212
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4217... Line 4217...
4217
				#必填的參數:
4217
				#必填的參數:
4218
				$conf["stringProcess.spiltString"]["stringIn"]=$factorStr;#要處理的字串。
4218
				$conf["stringProcess.spiltString"]["stringIn"]=$factorStr;#要處理的字串。
4219
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4219
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4220
				$factorStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4220
				$factorStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4221
				unset($conf["stringProcess.spiltString"]);
4221
				unset($conf["stringProcess.spiltString"]);
4222
				
4222
 
4223
				#如果處理結果字串出錯
4223
				#如果處理結果字串出錯
4224
				if($factorStr["status"]=="false"){
4224
				if($factorStr["status"]=="false"){
4225
					
4225
 
4226
					#設置執行不正常
4226
					#設置執行不正常
4227
					$result["status"]="false";
4227
					$result["status"]="false";
4228
					
4228
 
4229
					#設置錯誤訊息
4229
					#設置錯誤訊息
4230
					$result["error"]=$factorStr;
4230
					$result["error"]=$factorStr;
4231
					
4231
 
4232
					#回傳結果
4232
					#回傳結果
4233
					return $result;
4233
					return $result;
4234
					
4234
 
4235
					}#if end
4235
					}#if end
4236
					
4236
 
4237
				#剔除原因字串中不需要的字
4237
				#剔除原因字串中不需要的字
4238
				#涵式說明:
4238
				#涵式說明:
4239
				#處理多個字串避免網頁出錯
4239
				#處理多個字串避免網頁出錯
4240
				#回傳的結果:
4240
				#回傳的結果:
4241
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4241
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 4248... Line 4248...
4248
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4248
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4249
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4249
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4250
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4250
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4251
				$factorStr=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4251
				$factorStr=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4252
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4252
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4253
				
4253
 
4254
				#如果處理結果字串出錯
4254
				#如果處理結果字串出錯
4255
				if($factorStr["status"]=="false"){
4255
				if($factorStr["status"]=="false"){
4256
					
4256
 
4257
					#設置執行不正常
4257
					#設置執行不正常
4258
					$result["status"]="false";
4258
					$result["status"]="false";
4259
					
4259
 
4260
					#設置錯誤訊息
4260
					#設置錯誤訊息
4261
					$result["error"]=$factorStr;
4261
					$result["error"]=$factorStr;
4262
					
4262
 
4263
					#回傳結果
4263
					#回傳結果
4264
					return $result;
4264
					return $result;
4265
					
4265
 
4266
					}#if end
4266
					}#if end
4267
				
4267
 
4268
				#取得導致的原因
4268
				#取得導致的原因
4269
				$rulesArray[$rulesNum]["lhsName"][]=$factorStr["processedStrArray"][0];
4269
				$rulesArray[$rulesNum]["lhsName"][]=$factorStr["processedStrArray"][0];
4270
				$rulesArray[$rulesNum]["lhsValue"][]=$factorStr["processedStrArray"][1];
4270
				$rulesArray[$rulesNum]["lhsValue"][]=$factorStr["processedStrArray"][1];
4271
					
4271
 
4272
				#解析結果字串的變數名稱與其數值				
4272
				#解析結果字串的變數名稱與其數值
4273
				#涵式說明:
4273
				#涵式說明:
4274
				#將固定格式的字串分開,並回傳分開的結果。
4274
				#將固定格式的字串分開,並回傳分開的結果。
4275
				#回傳的參數:
4275
				#回傳的參數:
4276
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4276
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4277
				#$result["error"],錯誤訊息陣列
4277
				#$result["error"],錯誤訊息陣列
Line 4281... Line 4281...
4281
				#必填的參數:
4281
				#必填的參數:
4282
				$conf["stringProcess.spiltString"]["stringIn"]=$resultStr;#要處理的字串。
4282
				$conf["stringProcess.spiltString"]["stringIn"]=$resultStr;#要處理的字串。
4283
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4283
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4284
				$resultStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4284
				$resultStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4285
				unset($conf["stringProcess.spiltString"]);
4285
				unset($conf["stringProcess.spiltString"]);
4286
				
4286
 
4287
				#如果處理結果字串出錯
4287
				#如果處理結果字串出錯
4288
				if($resultStr["status"]=="false"){
4288
				if($resultStr["status"]=="false"){
4289
					
4289
 
4290
					#設置執行不正常
4290
					#設置執行不正常
4291
					$result["status"]="false";
4291
					$result["status"]="false";
4292
					
4292
 
4293
					#設置錯誤訊息
4293
					#設置錯誤訊息
4294
					$result["error"]=$resultStr;
4294
					$result["error"]=$resultStr;
4295
					
4295
 
4296
					#回傳結果
4296
					#回傳結果
4297
					return $result;
4297
					return $result;
4298
					
4298
 
4299
					}#if end
4299
					}#if end
4300
				
4300
 
4301
				#涵式說明:
4301
				#涵式說明:
4302
				#處理多個字串避免網頁出錯
4302
				#處理多個字串避免網頁出錯
4303
				#回傳的結果:
4303
				#回傳的結果:
4304
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4304
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4305
				#$result["error"],錯誤訊息
4305
				#$result["error"],錯誤訊息
Line 4311... Line 4311...
4311
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4311
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4312
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4312
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4313
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4313
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4314
				$resultName=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4314
				$resultName=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4315
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4315
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4316
				
4316
 
4317
				#如果處理結果字串出錯
4317
				#如果處理結果字串出錯
4318
				if($resultName["status"]=="false"){
4318
				if($resultName["status"]=="false"){
4319
					
4319
 
4320
					#設置執行不正常
4320
					#設置執行不正常
4321
					$result["status"]="false";
4321
					$result["status"]="false";
4322
					
4322
 
4323
					#設置錯誤訊息
4323
					#設置錯誤訊息
4324
					$result["error"]=$resultName;
4324
					$result["error"]=$resultName;
4325
					
4325
 
4326
					#回傳結果
4326
					#回傳結果
4327
					return $result;
4327
					return $result;
4328
					
4328
 
4329
					}#if end
4329
					}#if end
4330
				
4330
 
4331
				#取得導致的結果名稱
4331
				#取得導致的結果名稱
4332
				$rulesArray[$rulesNum]["rhsName"][]=$resultName["processedStrArray"][0];
4332
				$rulesArray[$rulesNum]["rhsName"][]=$resultName["processedStrArray"][0];
4333
				
4333
 
4334
				#取得導致的結果名稱對應的內容與其相關數值
4334
				#取得導致的結果名稱對應的內容與其相關數值
4335
				$resultValueAndOthers=$resultStr["dataArray"][1];
4335
				$resultValueAndOthers=$resultStr["dataArray"][1];
4336
				
4336
 
4337
				#解析導致的結果名稱對應的內容與其相關數值
4337
				#解析導致的結果名稱對應的內容與其相關數值
4338
				#涵式說明:
4338
				#涵式說明:
4339
				#處理多個字串避免網頁出錯
4339
				#處理多個字串避免網頁出錯
4340
				#回傳的結果:
4340
				#回傳的結果:
4341
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4341
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 4348... Line 4348...
4348
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4348
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4349
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4349
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4350
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4350
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4351
				$resultValueAndOthers=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4351
				$resultValueAndOthers=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4352
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4352
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4353
				
4353
 
4354
				#如果處理結果字串出錯
4354
				#如果處理結果字串出錯
4355
				if($resultValueAndOthers["status"]=="false"){
4355
				if($resultValueAndOthers["status"]=="false"){
4356
					
4356
 
4357
					#設置執行不正常
4357
					#設置執行不正常
4358
					$result["status"]="false";
4358
					$result["status"]="false";
4359
					
4359
 
4360
					#設置錯誤訊息
4360
					#設置錯誤訊息
4361
					$result["error"]=$resultValueAndOthers;
4361
					$result["error"]=$resultValueAndOthers;
4362
					
4362
 
4363
					#回傳結果
4363
					#回傳結果
4364
					return $result;
4364
					return $result;
4365
					
4365
 
4366
					}#if end
4366
					}#if end
4367
									
4367
 
4368
				#涵式說明:
4368
				#涵式說明:
4369
				#將固定格式的字串分開,並回傳分開的結果。
4369
				#將固定格式的字串分開,並回傳分開的結果。
4370
				#回傳的參數:
4370
				#回傳的參數:
4371
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4371
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4372
				#$result["error"],錯誤訊息陣列
4372
				#$result["error"],錯誤訊息陣列
Line 4376... Line 4376...
4376
				#必填的參數:
4376
				#必填的參數:
4377
				$conf["stringProcess.spiltString"]["stringIn"]=$resultValueAndOthers["processedStrArray"][0];#要處理的字串。
4377
				$conf["stringProcess.spiltString"]["stringIn"]=$resultValueAndOthers["processedStrArray"][0];#要處理的字串。
4378
				$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4378
				$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4379
				$resultValue=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4379
				$resultValue=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4380
				unset($conf["stringProcess.spiltString"]);
4380
				unset($conf["stringProcess.spiltString"]);
4381
				
4381
 
4382
				#如果處理結果字串出錯
4382
				#如果處理結果字串出錯
4383
				if($resultValue["status"]=="false"){
4383
				if($resultValue["status"]=="false"){
4384
					
4384
 
4385
					#設置執行不正常
4385
					#設置執行不正常
4386
					$result["status"]="false";
4386
					$result["status"]="false";
4387
					
4387
 
4388
					#設置錯誤訊息
4388
					#設置錯誤訊息
4389
					$result["error"]=$resultValue;
4389
					$result["error"]=$resultValue;
4390
					
4390
 
4391
					#回傳結果
4391
					#回傳結果
4392
					return $result;
4392
					return $result;
4393
					
4393
 
4394
					}#if end
4394
					}#if end
4395
				
4395
 
4396
				#取得導致的結果名稱對應的數值
4396
				#取得導致的結果名稱對應的數值
4397
				$rulesArray[$rulesNum]["rhsValue"][]=$resultValue["dataArray"][0];
4397
				$rulesArray[$rulesNum]["rhsValue"][]=$resultValue["dataArray"][0];
4398
							
4398
 
4399
				#取得導致結果名稱對應數值的 support
4399
				#取得導致結果名稱對應數值的 support
4400
				$rulesArray[$rulesNum]["support"][]=$resultValue["dataArray"][1];
4400
				$rulesArray[$rulesNum]["support"][]=$resultValue["dataArray"][1];
4401
				
4401
 
4402
				#取得導致結果名稱對應數值的 confidence
4402
				#取得導致結果名稱對應數值的 confidence
4403
				$rulesArray[$rulesNum]["confidence"][]=$resultValue["dataArray"][2];
4403
				$rulesArray[$rulesNum]["confidence"][]=$resultValue["dataArray"][2];
4404
				
4404
 
4405
				#取得導致結果名稱對應數值的 lift
4405
				#取得導致結果名稱對應數值的 lift
4406
				$rulesArray[$rulesNum]["lift"][]=$resultValue["dataArray"][3];
4406
				$rulesArray[$rulesNum]["lift"][]=$resultValue["dataArray"][3];
4407
									
4407
 
4408
				}#if end
4408
				}#if end
4409
				
4409
 
4410
			#反之沒有找到關鍵字
4410
			#反之沒有找到關鍵字
4411
			else{
4411
			else{
4412
				
4412
 
4413
				#取得該行結果
4413
				#取得該行結果
4414
				$thisLine=$executeResult["lineArray"][$i];
4414
				$thisLine=$executeResult["lineArray"][$i];
4415
				
4415
 
4416
				#涵式說明:
4416
				#涵式說明:
4417
				#處理多個字串避免網頁出錯
4417
				#處理多個字串避免網頁出錯
4418
				#回傳的結果:
4418
				#回傳的結果:
4419
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4419
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
4420
				#$result["function"],當前執行的函數.
4420
				#$result["function"],當前執行的函數.
Line 4427... Line 4427...
4427
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4427
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
4428
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4428
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4429
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4429
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4430
				$thisLine=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4430
				$thisLine=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
4431
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4431
				unset($conf["stringProcess::correctMutiStrCharacter"]);
4432
				
4432
 
4433
				#如果處理結果字串出錯
4433
				#如果處理結果字串出錯
4434
				if($thisLine["status"]=="false"){
4434
				if($thisLine["status"]=="false"){
4435
					
4435
 
4436
					#設置執行不正常
4436
					#設置執行不正常
4437
					$result["status"]="false";
4437
					$result["status"]="false";
4438
					
4438
 
4439
					#設置錯誤訊息
4439
					#設置錯誤訊息
4440
					$result["error"]=$thisLine;
4440
					$result["error"]=$thisLine;
4441
					
4441
 
4442
					#回傳結果
4442
					#回傳結果
4443
					return $result;
4443
					return $result;
4444
					
4444
 
4445
					}#if end
4445
					}#if end
4446
					
4446
 
4447
				#涵式說明:
4447
				#涵式說明:
4448
				#將固定格式的字串分開,並回傳分開的結果。
4448
				#將固定格式的字串分開,並回傳分開的結果。
4449
				#回傳的參數:
4449
				#回傳的參數:
4450
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4450
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4451
				#$result["error"],錯誤訊息陣列
4451
				#$result["error"],錯誤訊息陣列
Line 4456... Line 4456...
4456
				#必填的參數:
4456
				#必填的參數:
4457
				$conf["stringProcess.spiltString"]["stringIn"]=$thisLine["processedStrArray"][0];#要處理的字串。
4457
				$conf["stringProcess.spiltString"]["stringIn"]=$thisLine["processedStrArray"][0];#要處理的字串。
4458
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4458
				$conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
4459
				$conditionStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4459
				$conditionStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4460
				unset($conf["stringProcess.spiltString"]);
4460
				unset($conf["stringProcess.spiltString"]);
4461
				
4461
 
4462
				#如果處理結果字串出錯
4462
				#如果處理結果字串出錯
4463
				if($conditionStr["status"]=="false"){
4463
				if($conditionStr["status"]=="false"){
4464
					
4464
 
4465
					#設置執行不正常
4465
					#設置執行不正常
4466
					$result["status"]="false";
4466
					$result["status"]="false";
4467
					
4467
 
4468
					#設置錯誤訊息
4468
					#設置錯誤訊息
4469
					$result["error"]=$conditionStr;
4469
					$result["error"]=$conditionStr;
4470
					
4470
 
4471
					#回傳結果
4471
					#回傳結果
4472
					return $result;
4472
					return $result;
4473
					
4473
 
4474
					}#if end
4474
					}#if end
4475
					
4475
 
4476
				#將導致的原因變數名稱前的規則號碼剔除
4476
				#將導致的原因變數名稱前的規則號碼剔除
4477
				#涵式說明:
4477
				#涵式說明:
4478
				#處理字串避免網頁出錯
4478
				#處理字串避免網頁出錯
4479
				#回傳的結果:
4479
				#回傳的結果:
4480
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4480
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4488... Line 4488...
4488
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
4488
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
4489
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4489
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
4490
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4490
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
4491
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
4491
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
4492
				unset($conf["stringProcess::correctCharacter"]);
4492
				unset($conf["stringProcess::correctCharacter"]);
4493
								
4493
 
4494
				#如果修正出錯
4494
				#如果修正出錯
4495
				if($correctCharacter["status"]=="false"){
4495
				if($correctCharacter["status"]=="false"){
4496
					
4496
 
4497
					#設置執行不正常
4497
					#設置執行不正常
4498
					$result["status"]="false";
4498
					$result["status"]="false";
4499
					
4499
 
4500
					#設置錯誤訊息
4500
					#設置錯誤訊息
4501
					$result["error"]=$correctCharacter;
4501
					$result["error"]=$correctCharacter;
4502
					
4502
 
4503
					#回傳結果
4503
					#回傳結果
4504
					return $result;
4504
					return $result;
4505
					
4505
 
4506
					}#if end	
4506
					}#if end
4507
										
4507
 
4508
				#取得處理好的導致的原因變數名稱
4508
				#取得處理好的導致的原因變數名稱
4509
				$rulesArray[$rulesNum]["lhsName"][]=$correctCharacter["content"];
4509
				$rulesArray[$rulesNum]["lhsName"][]=$correctCharacter["content"];
4510
				
4510
 
4511
				#如果 $conditionStr["dataArray"][1] 不存在
4511
				#如果 $conditionStr["dataArray"][1] 不存在
4512
				if(!isset($conditionStr["dataArray"][1])){
4512
				if(!isset($conditionStr["dataArray"][1])){
4513
					
4513
 
4514
					#設爲 ""
4514
					#設爲 ""
4515
					$conditionStr["dataArray"][1]="";
4515
					$conditionStr["dataArray"][1]="";
4516
					
4516
 
4517
					}#if end
4517
					}#if end
4518
				
4518
 
4519
				#取得導致的原因變數名稱其值爲何
4519
				#取得導致的原因變數名稱其值爲何
4520
				$rulesArray[$rulesNum]["lhsValue"][]=$conditionStr["dataArray"][1];
4520
				$rulesArray[$rulesNum]["lhsValue"][]=$conditionStr["dataArray"][1];
4521
				
4521
 
4522
				}#else end
4522
				}#else end
4523
			
4523
 
4524
			}#for end
4524
			}#for end
4525
		
4525
 
4526
		#取得規則內容
4526
		#取得規則內容
4527
		$result["content"]["rulesArray"]=$rulesArray;
4527
		$result["content"]["rulesArray"]=$rulesArray;
4528
					
4528
 
4529
		#取得規則的數量
4529
		#取得規則的數量
4530
		$result["content"]["rulesCount"]=count($rulesArray);		
4530
		$result["content"]["rulesCount"]=count($rulesArray);
4531
						
4531
 
4532
		#設置執行正常	 
4532
		#設置執行正常
4533
		$result["status"]="true";
4533
		$result["status"]="true";
4534
		
4534
 
4535
		#回傳結果
4535
		#回傳結果
4536
		return $result;
4536
		return $result;
4537
					
4537
 
4538
		}#funciton apriori end
4538
		}#funciton apriori end
4539
	
4539
 
4540
	/*
4540
	/*
4541
	#函式說明:
4541
	#函式說明:
4542
	#繪製樣本中其中兩個題項填寫狀況的交叉表
4542
	#繪製樣本中其中兩個題項填寫狀況的交叉表
4543
	#回傳結果:
4543
	#回傳結果:
4544
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
4544
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
4545
	#$result["error"],錯誤訊息陣列
4545
	#$result["error"],錯誤訊息陣列
4546
	#$result["function"],當前函數名稱
4546
	#$result["function"],當前函數名稱
4547
	#$result["RscriptContent"],執行的R腳本內容
4547
	#$result["RscriptContent"],執行的R腳本內容
4548
	#$result["content"],交叉表的資料
4548
	#$result["content"],交叉表的資料
4549
	#$result["content"]["xLabelTypeName"],欄項目的類型名稱
4549
	#$result["content"]["xLabelTypeName"],欄項目的類型名稱
4550
	#$result["content"]["yLabelTypeName"],列項目的類型名稱 
4550
	#$result["content"]["yLabelTypeName"],列項目的類型名稱
4551
	#$result["content"]["xLabelName"],欄項目名稱陣列
4551
	#$result["content"]["xLabelName"],欄項目名稱陣列
4552
	#$result["content"]["yLabelName"],列項目名稱陣列
4552
	#$result["content"]["yLabelName"],列項目名稱陣列
4553
	#$result["content"][$i]["xLabelName"],交叉表從上致下,從左至右第$i+1個數值的x軸項目名稱.
4553
	#$result["content"][$i]["xLabelName"],交叉表從上致下,從左至右第$i+1個數值的x軸項目名稱.
4554
	#$result["content"][$i]["yLabelName"],交叉表從上致下,從左至右第$i+1個數值的y軸項目名稱.
4554
	#$result["content"][$i]["yLabelName"],交叉表從上致下,從左至右第$i+1個數值的y軸項目名稱.
4555
	#$result["content"][$i]["value"],交叉表從上致下,從左至右第$i+1個數值.
4555
	#$result["content"][$i]["value"],交叉表從上致下,從左至右第$i+1個數值.
4556
	#$result["content"]["htmlAddress"],交叉表html檔案的位址與檔案名稱. 
4556
	#$result["content"]["htmlAddress"],交叉表html檔案的位址與檔案名稱.
4557
	#必填參數:
4557
	#必填參數:
4558
	#$conf["dnnStr"],字串陣列,每個資料集的名稱
4558
	#$conf["dnnStr"],字串陣列,每個資料集的名稱
4559
	$conf["dnnStr"]=array("","","");
4559
	$conf["dnnStr"]=array("","","");
4560
	#$conf["dataArrayA"],字串陣列,要繪製交叉表的資料A,元素數量必須跟$conf["dataArrayB"]一樣。
4560
	#$conf["dataArrayA"],字串陣列,要繪製交叉表的資料A,元素數量必須跟$conf["dataArrayB"]一樣。
4561
	$conf["dataArrayA"]=array();
4561
	$conf["dataArrayA"]=array();
Line 4572... Line 4572...
4572
	#無.
4572
	#無.
4573
	#備註:
4573
	#備註:
4574
	#無
4574
	#無
4575
	*/
4575
	*/
4576
	public static function table(&$conf){
4576
	public static function table(&$conf){
4577
	
4577
 
4578
		#初始化要回傳的結果
4578
		#初始化要回傳的結果
4579
		$result=array();
4579
		$result=array();
4580
		
4580
 
4581
		#如果 $conf 不等於 "array"
4581
		#如果 $conf 不等於 "array"
4582
		if(gettype($conf)!="array"){				
4582
		if(gettype($conf)!="array"){
4583
			
4583
 
4584
			#設定錯誤識別
4584
			#設定錯誤識別
4585
			$result["status"]="false";
4585
			$result["status"]="false";
4586
			
4586
 
4587
			#設置錯誤訊息
4587
			#設置錯誤訊息
4588
			$result["error"]="參數的Key指定有誤!";
4588
			$result["error"]="參數的Key指定有誤!";
4589
			
4589
 
4590
			#如果傳入的參數為 null
4590
			#如果傳入的參數為 null
4591
			if($conf==null){
4591
			if($conf==null){
4592
				
4592
 
4593
				#設置執行錯誤訊息
4593
				#設置執行錯誤訊息
4594
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4594
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4595
				
4595
 
4596
				}#if end
4596
				}#if end
4597
			
4597
 
4598
			#回傳結果
4598
			#回傳結果
4599
			return $result;
4599
			return $result;
4600
			
4600
 
4601
			}#if end
4601
			}#if end
4602
		
4602
 
4603
		#如果 $_SESSION["username"] 不存在
4603
		#如果 $_SESSION["username"] 不存在
4604
		if(!isset($_SESSION["username"])){
4604
		if(!isset($_SESSION["username"])){
4605
			
4605
 
4606
			#設為"NULL"
4606
			#設為"NULL"
4607
			$_SESSION["username"]="NULL";
4607
			$_SESSION["username"]="NULL";
4608
			
4608
 
4609
			}#if end
4609
			}#if end
4610
		
4610
 
4611
		#檢查參數
4611
		#檢查參數
4612
		#函式說明:
4612
		#函式說明:
4613
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4613
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4614
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4614
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4615
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4615
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 4621... Line 4621...
4621
		#必填寫的參數:
4621
		#必填寫的參數:
4622
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4622
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4623
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
4623
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
4624
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4624
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4625
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dnnStr","dataArrayA","dataArrayB");
4625
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dnnStr","dataArrayA","dataArrayB");
4626
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
4626
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
4627
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","array");
4627
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","array");
4628
		#$conf["variableCheck.checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4628
		#$conf["variableCheck.checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4629
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
4629
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
4630
		#可以省略的參數:
4630
		#可以省略的參數:
4631
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
4631
		#$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
4632
		$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
4632
		$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
4633
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4633
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4634
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dataArrayC","crossTableAddress");
4634
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dataArrayC","crossTableAddress");
4635
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4635
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4636
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","string");
4636
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","string");
4637
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4637
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4638
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,".R/table-".$_SESSION["username"].".html");
4638
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,".R/table-".$_SESSION["username"].".html");
4639
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4639
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4640
		$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("dataArrayA","dataArrayB","dataArrayC");
4640
		$conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("dataArrayA","dataArrayB","dataArrayC");
4641
		$checkArgumentsResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
4641
		$checkArgumentsResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
4642
		unset($conf["variableCheck.checkArguments"]);
4642
		unset($conf["variableCheck.checkArguments"]);
4643
		
4643
 
4644
		#如果檢查參數失敗
4644
		#如果檢查參數失敗
4645
		if($checkArgumentsResult["status"]=="false"){
4645
		if($checkArgumentsResult["status"]=="false"){
4646
			
4646
 
4647
			#設置執行失敗
4647
			#設置執行失敗
4648
			$result["status"]="false";
4648
			$result["status"]="false";
4649
			
4649
 
4650
			#設置執行錯誤
4650
			#設置執行錯誤
4651
			$result["error"]=$checkArgumentsResult;
4651
			$result["error"]=$checkArgumentsResult;
4652
			
4652
 
4653
			#回傳結果
4653
			#回傳結果
4654
			return $result;
4654
			return $result;
4655
			
4655
 
4656
			}#if end
4656
			}#if end
4657
			
4657
 
4658
		#如果參數檢查不通過
4658
		#如果參數檢查不通過
4659
		if($checkArgumentsResult["passed"]=="false"){
4659
		if($checkArgumentsResult["passed"]=="false"){
4660
			
4660
 
4661
			#設置執行失敗
4661
			#設置執行失敗
4662
			$result["status"]="false";
4662
			$result["status"]="false";
4663
			
4663
 
4664
			#設置執行錯誤
4664
			#設置執行錯誤
4665
			$result["error"]=$checkArgumentsResult;
4665
			$result["error"]=$checkArgumentsResult;
4666
			
4666
 
4667
			#回傳結果
4667
			#回傳結果
4668
			return $result;
4668
			return $result;
4669
			
4669
 
4670
			}#if end
4670
			}#if end
4671
		
4671
 
4672
		#初始化儲存資料集C的字串變數
4672
		#初始化儲存資料集C的字串變數
4673
		$dataArrayC="";
4673
		$dataArrayC="";
4674
															
4674
 
4675
		#產生用於產生交叉表的R語法
4675
		#產生用於產生交叉表的R語法
4676
		
4676
 
4677
		#初始化儲存資料集名稱的變數
4677
		#初始化儲存資料集名稱的變數
4678
		$dnnStr="c(";
4678
		$dnnStr="c(";
4679
		
4679
 
4680
		#如果 $dataArrayC 等於 ""
4680
		#如果 $dataArrayC 等於 ""
4681
		if($dataArrayC==""){
4681
		if($dataArrayC==""){
4682
			
4682
 
4683
			#串接兩個資料集名稱
4683
			#串接兩個資料集名稱
4684
			$dnnStr=$dnnStr."\"".$conf["dnnStr"][0]."\","."\"".$conf["dnnStr"][1]."\")";
4684
			$dnnStr=$dnnStr."\"".$conf["dnnStr"][0]."\","."\"".$conf["dnnStr"][1]."\")";
4685
			
4685
 
4686
			#產生用於產生交叉表的R語法
4686
			#產生用於產生交叉表的R語法
4687
			$table="table(dataA,dataB,dnn=dnnStr)";
4687
			$table="table(dataA,dataB,dnn=dnnStr)";
4688
			
4688
 
4689
			}#if end
4689
			}#if end
4690
			
4690
 
4691
		#反之
4691
		#反之
4692
		else{
4692
		else{
4693
			
4693
 
4694
			#串接三個資料集名稱
4694
			#串接三個資料集名稱
4695
			$dnnStr=$dnnStr."\"".$conf["dnnStr"][0]."\","."\"".$conf["dnnStr"][1]."\""."\","."\"".$conf["dnnStr"][2]."\")";
4695
			$dnnStr=$dnnStr."\"".$conf["dnnStr"][0]."\","."\"".$conf["dnnStr"][1]."\""."\","."\"".$conf["dnnStr"][2]."\")";
4696
			
4696
 
4697
			$table="table(dataA,dataB,dataC,dnn=dnnStr)";
4697
			$table="table(dataA,dataB,dataC,dnn=dnnStr)";
4698
			
4698
 
4699
			}#else end
4699
			}#else end
4700
			
4700
 
4701
		#取得欄項目的類型名稱
4701
		#取得欄項目的類型名稱
4702
		$result["content"]["xLabelTypeName"]=$conf["dnnStr"][1];
4702
		$result["content"]["xLabelTypeName"]=$conf["dnnStr"][1];
4703
		
4703
 
4704
		#取得列項目的類型名稱 
4704
		#取得列項目的類型名稱
4705
		$result["content"]["yLabelTypeName"]=$conf["dnnStr"][0];
4705
		$result["content"]["yLabelTypeName"]=$conf["dnnStr"][0];
4706
											
4706
 
4707
		#涵式說明:
4707
		#涵式說明:
4708
		#建立R檔案
4708
		#建立R檔案
4709
		#回傳的結果:
4709
		#回傳的結果:
4710
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
4710
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
4711
		#$result["error"],錯誤訊息陣列.
4711
		#$result["error"],錯誤訊息陣列.
Line 4717... Line 4717...
4717
		$conf["R.writeRfile"]["textToWrite"][]="";
4717
		$conf["R.writeRfile"]["textToWrite"][]="";
4718
		$conf["R.writeRfile"]["textToWrite"][]="#資料集描述";
4718
		$conf["R.writeRfile"]["textToWrite"][]="#資料集描述";
4719
		$conf["R.writeRfile"]["textToWrite"][]="dnnStr=".$dnnStr;
4719
		$conf["R.writeRfile"]["textToWrite"][]="dnnStr=".$dnnStr;
4720
		$conf["R.writeRfile"]["textToWrite"][]="";
4720
		$conf["R.writeRfile"]["textToWrite"][]="";
4721
		$conf["R.writeRfile"]["textToWrite"][]="#資料集A(會稱呈現在Y軸)";
4721
		$conf["R.writeRfile"]["textToWrite"][]="#資料集A(會稱呈現在Y軸)";
4722
		
4722
 
4723
		#建立資料集A
4723
		#建立資料集A
4724
		#涵式說明:
4724
		#涵式說明:
4725
		#避免超出4096bytes限制的條件下產生向量變數語法
4725
		#避免超出4096bytes限制的條件下產生向量變數語法
4726
		#請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
4726
		#請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
4727
		#回傳結果:
4727
		#回傳結果:
Line 4736... Line 4736...
4736
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayA"];
4736
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayA"];
4737
		#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
4737
		#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
4738
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
4738
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
4739
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
4739
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
4740
		unset($conf["R::createFixedVectorVar"]);
4740
		unset($conf["R::createFixedVectorVar"]);
4741
		
4741
 
4742
		#如果新增建立R向量變數失敗
4742
		#如果新增建立R向量變數失敗
4743
		if($createFixedVectorVar["status"]=="false"){
4743
		if($createFixedVectorVar["status"]=="false"){
4744
			
4744
 
4745
			#設置執行失敗
4745
			#設置執行失敗
4746
			$result["status"]="false";
4746
			$result["status"]="false";
4747
			
4747
 
4748
			#設置執行錯誤
4748
			#設置執行錯誤
4749
			$result["error"]=$createFixedVectorVar;
4749
			$result["error"]=$createFixedVectorVar;
4750
			
4750
 
4751
			#回傳結果
4751
			#回傳結果
4752
			return $result;
4752
			return $result;
4753
			
4753
 
4754
			}#if end
4754
			}#if end
4755
		
4755
 
4756
		$conf["R.writeRfile"]["textToWrite"][]="";
4756
		$conf["R.writeRfile"]["textToWrite"][]="";
4757
		$conf["R.writeRfile"]["textToWrite"][]="#資料集B(會稱呈現在X軸)";
4757
		$conf["R.writeRfile"]["textToWrite"][]="#資料集B(會稱呈現在X軸)";
4758
		
4758
 
4759
		#建立資料集B
4759
		#建立資料集B
4760
		#涵式說明:
4760
		#涵式說明:
4761
		#避免超出4096bytes限制的條件下產生向量變數語法
4761
		#避免超出4096bytes限制的條件下產生向量變數語法
4762
		#請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
4762
		#請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
4763
		#回傳結果:
4763
		#回傳結果:
Line 4772... Line 4772...
4772
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayB"];
4772
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayB"];
4773
		#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
4773
		#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
4774
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
4774
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
4775
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
4775
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
4776
		unset($conf["R::createFixedVectorVar"]);
4776
		unset($conf["R::createFixedVectorVar"]);
4777
		
4777
 
4778
		#如果新增建立R向量變數失敗
4778
		#如果新增建立R向量變數失敗
4779
		if($createFixedVectorVar["status"]=="false"){
4779
		if($createFixedVectorVar["status"]=="false"){
4780
			
4780
 
4781
			#設置執行失敗
4781
			#設置執行失敗
4782
			$result["status"]="false";
4782
			$result["status"]="false";
4783
			
4783
 
4784
			#設置執行錯誤
4784
			#設置執行錯誤
4785
			$result["error"]=$createFixedVectorVar;
4785
			$result["error"]=$createFixedVectorVar;
4786
			
4786
 
4787
			#回傳結果
4787
			#回傳結果
4788
			return $result;
4788
			return $result;
4789
			
4789
 
4790
			}#if end
4790
			}#if end
4791
		
4791
 
4792
		$conf["R.writeRfile"]["textToWrite"][]="";
4792
		$conf["R.writeRfile"]["textToWrite"][]="";
4793
		$conf["R.writeRfile"]["textToWrite"][]="#第三個資料集,有幾種資料就會繪製幾個交叉表";
4793
		$conf["R.writeRfile"]["textToWrite"][]="#第三個資料集,有幾種資料就會繪製幾個交叉表";
4794
		
4794
 
4795
		#如果 $conf["dataArrayC"] 存在
4795
		#如果 $conf["dataArrayC"] 存在
4796
		if(isset($conf["dataArrayC"])){
4796
		if(isset($conf["dataArrayC"])){
4797
		
4797
 
4798
			#如果 $conf["dataArrayC"] 不為 ""
4798
			#如果 $conf["dataArrayC"] 不為 ""
4799
			if($conf["dataArrayC"]!=""){
4799
			if($conf["dataArrayC"]!=""){
4800
					
4800
 
4801
				#建立資料集C
4801
				#建立資料集C
4802
				#涵式說明:
4802
				#涵式說明:
4803
				#避免超出4096bytes限制的條件下產生向量變數語法
4803
				#避免超出4096bytes限制的條件下產生向量變數語法
4804
				#請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
4804
				#請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
4805
				#回傳結果:
4805
				#回傳結果:
Line 4813... Line 4813...
4813
				#$conf["R::createFixedVectorVar"]["vectorData"],陣列變數,要產生的向量變數資料。
4813
				#$conf["R::createFixedVectorVar"]["vectorData"],陣列變數,要產生的向量變數資料。
4814
				$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayC"];
4814
				$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayC"];
4815
				#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
4815
				#$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
4816
				$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
4816
				$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
4817
				$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
4817
				$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
4818
				unset($conf["R::createFixedVectorVar"]);	
4818
				unset($conf["R::createFixedVectorVar"]);
4819
						
4819
 
4820
				#如果新增建立R向量變數失敗
4820
				#如果新增建立R向量變數失敗
4821
				if($createFixedVectorVar["status"]=="false"){
4821
				if($createFixedVectorVar["status"]=="false"){
4822
					
4822
 
4823
					#設置執行失敗
4823
					#設置執行失敗
4824
					$result["status"]="false";
4824
					$result["status"]="false";
4825
					
4825
 
4826
					#設置執行錯誤
4826
					#設置執行錯誤
4827
					$result["error"]=$createFixedVectorVar;
4827
					$result["error"]=$createFixedVectorVar;
4828
					
4828
 
4829
					#回傳結果
4829
					#回傳結果
4830
					return $result;
4830
					return $result;
4831
					
4831
 
4832
					}#if end		
4832
					}#if end
4833
														
4833
 
4834
				}#if end
4834
				}#if end
4835
			
4835
 
4836
			}#if end
4836
			}#if end
4837
				
4837
 
4838
		$conf["R.writeRfile"]["textToWrite"][]="";
4838
		$conf["R.writeRfile"]["textToWrite"][]="";
4839
		$conf["R.writeRfile"]["textToWrite"][]="#產生交叉表";
4839
		$conf["R.writeRfile"]["textToWrite"][]="#產生交叉表";
4840
		$conf["R.writeRfile"]["textToWrite"][]="data.table=".$table;
4840
		$conf["R.writeRfile"]["textToWrite"][]="data.table=".$table;
4841
		$conf["R.writeRfile"]["textToWrite"][]="";
4841
		$conf["R.writeRfile"]["textToWrite"][]="";
4842
		$conf["R.writeRfile"]["textToWrite"][]="#輸出列的項目名稱";
4842
		$conf["R.writeRfile"]["textToWrite"][]="#輸出列的項目名稱";
Line 4856... Line 4856...
4856
		$conf["R.writeRfile"]["textToWrite"][]="";
4856
		$conf["R.writeRfile"]["textToWrite"][]="";
4857
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4857
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4858
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
4858
		$conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
4859
		$writeRfile=R::writeRfile($conf["R.writeRfile"]);
4859
		$writeRfile=R::writeRfile($conf["R.writeRfile"]);
4860
		unset($conf["R.writeRfile"]);
4860
		unset($conf["R.writeRfile"]);
4861
		
4861
 
4862
		#如果R腳本檔建立失敗
4862
		#如果R腳本檔建立失敗
4863
		if($writeRfile["status"]=="false"){
4863
		if($writeRfile["status"]=="false"){
4864
			
4864
 
4865
			#設置執行不正常
4865
			#設置執行不正常
4866
			$result["status"]="false";
4866
			$result["status"]="false";
4867
			
4867
 
4868
			#設置執行錯誤訊息
4868
			#設置執行錯誤訊息
4869
			$result["error"]=$writeRfile;
4869
			$result["error"]=$writeRfile;
4870
			
4870
 
4871
			#回傳結果
4871
			#回傳結果
4872
			return $result;
4872
			return $result;
4873
			
4873
 
4874
			}#if end
4874
			}#if end
4875
						
4875
 
4876
		#執行R腳本檔
4876
		#執行R腳本檔
4877
		#函式說明:
4877
		#函式說明:
4878
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
4878
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
4879
		#回傳的結果:
4879
		#回傳的結果:
4880
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4880
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4890... Line 4890...
4890
		#可省略的參數:
4890
		#可省略的參數:
4891
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
4891
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
4892
		#$conf["R.executeR"]["disbaleOptimal"]="true";
4892
		#$conf["R.executeR"]["disbaleOptimal"]="true";
4893
		$executeRresult=R::executeR($conf["R.executeR"]);
4893
		$executeRresult=R::executeR($conf["R.executeR"]);
4894
		unset($conf["R.executeR"]);
4894
		unset($conf["R.executeR"]);
4895
		
4895
 
4896
		#如果執行R腳本失敗
4896
		#如果執行R腳本失敗
4897
		if($executeRresult["status"]=="false"){
4897
		if($executeRresult["status"]=="false"){
4898
			
4898
 
4899
			#設置執行不正常
4899
			#設置執行不正常
4900
			$result["status"]="false";
4900
			$result["status"]="false";
4901
			
4901
 
4902
			#設置執行錯誤訊息
4902
			#設置執行錯誤訊息
4903
			$result["error"]=$executeRresult;
4903
			$result["error"]=$executeRresult;
4904
			
4904
 
4905
			#回傳結果
4905
			#回傳結果
4906
			return $result;
4906
			return $result;
4907
			
4907
 
4908
			}#if end
4908
			}#if end
4909
		
4909
 
4910
		#檢查 ".R/table-".$_SESSION["username"]."-R-CatOutput" 是否存在
4910
		#檢查 ".R/table-".$_SESSION["username"]."-R-CatOutput" 是否存在
4911
		#涵式說明:檢查多個檔案與資料夾是否存在.
4911
		#涵式說明:檢查多個檔案與資料夾是否存在.
4912
		#回傳的結果:
4912
		#回傳的結果:
4913
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
4913
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
4914
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
4914
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
Line 4919... Line 4919...
4919
		#參考資料來源:
4919
		#參考資料來源:
4920
		#http://php.net/manual/en/function.file-exists.php
4920
		#http://php.net/manual/en/function.file-exists.php
4921
		#http://php.net/manual/en/control-structures.foreach.php
4921
		#http://php.net/manual/en/control-structures.foreach.php
4922
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
4922
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
4923
		unset($conf["fileAccess.checkMultiFileExist"]);
4923
		unset($conf["fileAccess.checkMultiFileExist"]);
4924
		
4924
 
4925
		#如果 ".R/table-".$_SESSION["username"]."-R-CatOutput" 不存在
4925
		#如果 ".R/table-".$_SESSION["username"]."-R-CatOutput" 不存在
4926
		if($checkMultiFileExist["varExist"][0]=="false"){
4926
		if($checkMultiFileExist["varExist"][0]=="false"){
4927
			
4927
 
4928
			#設置執行失敗
4928
			#設置執行失敗
4929
			$result["status"]="false";
4929
			$result["status"]="false";
4930
			
4930
 
4931
			#設置執行錯誤
4931
			#設置執行錯誤
4932
			$result["error"]=$checkMultiFileExist;
4932
			$result["error"]=$checkMultiFileExist;
4933
			
4933
 
4934
			#回傳結果
4934
			#回傳結果
4935
			return $result;
4935
			return $result;
4936
			
4936
 
4937
			}#if end
4937
			}#if end
4938
		
4938
 
4939
		#讀取 ".R/table-".$_SESSION["username"]."-R-CatOutput" 檔案的內容以便存取列與欄的項目名稱. 
4939
		#讀取 ".R/table-".$_SESSION["username"]."-R-CatOutput" 檔案的內容以便存取列與欄的項目名稱.
4940
		#函式說明:
4940
		#函式說明:
4941
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
4941
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
4942
		#回傳的變數說明:
4942
		#回傳的變數說明:
4943
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
4943
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
4944
		#$result["error"],錯誤訊息提示
4944
		#$result["error"],錯誤訊息提示
Line 4953... Line 4953...
4953
		#file():取得檔案內容的行數
4953
		#file():取得檔案內容的行數
4954
		#http:#php.net/manual/en/function.file.php
4954
		#http:#php.net/manual/en/function.file.php
4955
		#rtrim():剔除透過file()取得每行內容結尾的換行符號.
4955
		#rtrim():剔除透過file()取得每行內容結尾的換行符號.
4956
		$getFileContent=fileAccess::getFileContent($conf["fileAccess.getFileContent"]);
4956
		$getFileContent=fileAccess::getFileContent($conf["fileAccess.getFileContent"]);
4957
		unset($conf["fileAccess.getFileContent"]);
4957
		unset($conf["fileAccess.getFileContent"]);
4958
		
4958
 
4959
		#如果 讀取檔案 ".R/table-".$_SESSION["username"]."-R-CatOutput" 失敗
4959
		#如果 讀取檔案 ".R/table-".$_SESSION["username"]."-R-CatOutput" 失敗
4960
		if($getFileContent["status"]=="false"){
4960
		if($getFileContent["status"]=="false"){
4961
			
4961
 
4962
			#設置執行失敗
4962
			#設置執行失敗
4963
			$result["status"]="false";
4963
			$result["status"]="false";
4964
			
4964
 
4965
			#設置執行錯誤
4965
			#設置執行錯誤
4966
			$result["error"]=$getFileContent;
4966
			$result["error"]=$getFileContent;
4967
			
4967
 
4968
			#回傳結果
4968
			#回傳結果
4969
			return $result;
4969
			return $result;
4970
			
4970
 
4971
			}#if end
4971
			}#if end
4972
			
4972
 
4973
		#取得列項目名稱
4973
		#取得列項目名稱
4974
		$rowStr=$getFileContent["fileContent"][0];
4974
		$rowStr=$getFileContent["fileContent"][0];
4975
		
4975
 
4976
		#解析列項目名稱
4976
		#解析列項目名稱
4977
		#涵式說明:
4977
		#涵式說明:
4978
		#將固定格式的字串分開,並回傳分開的結果。
4978
		#將固定格式的字串分開,並回傳分開的結果。
4979
		#回傳的參數:
4979
		#回傳的參數:
4980
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4980
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4985... Line 4985...
4985
		#必填的參數:
4985
		#必填的參數:
4986
		$conf["stringProcess.spiltString"]["stringIn"]=$rowStr;#要處理的字串。
4986
		$conf["stringProcess.spiltString"]["stringIn"]=$rowStr;#要處理的字串。
4987
		$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4987
		$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
4988
		#備註:
4988
		#備註:
4989
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
4989
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
4990
		$spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]); 
4990
		$spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]);
4991
		unset($conf["stringProcess.spiltString"]);
4991
		unset($conf["stringProcess.spiltString"]);
4992
		
4992
 
4993
		#如果解析列項目字串失敗
4993
		#如果解析列項目字串失敗
4994
		if($spiltString["status"]=="false"){
4994
		if($spiltString["status"]=="false"){
4995
			
4995
 
4996
			#設置執行失敗
4996
			#設置執行失敗
4997
			$result["status"]="false";
4997
			$result["status"]="false";
4998
			
4998
 
4999
			#設置執行錯誤
4999
			#設置執行錯誤
5000
			$result["error"]=$spiltString;
5000
			$result["error"]=$spiltString;
5001
			
5001
 
5002
			#回傳結果
5002
			#回傳結果
5003
			return $result;
5003
			return $result;
5004
			
5004
 
5005
			}#if end
5005
			}#if end
5006
		
5006
 
5007
		#取得解析好的列項目陣列	
5007
		#取得解析好的列項目陣列
5008
		$result["content"]["yLabelName"]=$spiltString["dataArray"];
5008
		$result["content"]["yLabelName"]=$spiltString["dataArray"];
5009
					
5009
 
5010
		#取得欄項目名稱
5010
		#取得欄項目名稱
5011
		$colStr=$getFileContent["fileContent"][1];
5011
		$colStr=$getFileContent["fileContent"][1];
5012
		
5012
 
5013
		#解析欄項目名稱
5013
		#解析欄項目名稱
5014
		#涵式說明:
5014
		#涵式說明:
5015
		#將固定格式的字串分開,並回傳分開的結果。
5015
		#將固定格式的字串分開,並回傳分開的結果。
5016
		#回傳的參數:
5016
		#回傳的參數:
5017
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5017
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 5022... Line 5022...
5022
		#必填的參數:
5022
		#必填的參數:
5023
		$conf["stringProcess.spiltString"]["stringIn"]=$colStr;#要處理的字串。
5023
		$conf["stringProcess.spiltString"]["stringIn"]=$colStr;#要處理的字串。
5024
		$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5024
		$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5025
		#備註:
5025
		#備註:
5026
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5026
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5027
		$spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]); 
5027
		$spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]);
5028
		unset($conf["stringProcess.spiltString"]);
5028
		unset($conf["stringProcess.spiltString"]);
5029
		
5029
 
5030
		#如果解析列項目字串失敗
5030
		#如果解析列項目字串失敗
5031
		if($spiltString["status"]=="false"){
5031
		if($spiltString["status"]=="false"){
5032
			
5032
 
5033
			#設置執行失敗
5033
			#設置執行失敗
5034
			$result["status"]="false";
5034
			$result["status"]="false";
5035
			
5035
 
5036
			#設置執行錯誤
5036
			#設置執行錯誤
5037
			$result["error"]=$spiltString;
5037
			$result["error"]=$spiltString;
5038
			
5038
 
5039
			#回傳結果
5039
			#回傳結果
5040
			return $result;
5040
			return $result;
5041
			
5041
 
5042
			}#if end
5042
			}#if end
5043
			
5043
 
5044
		#取得解析好的行項目陣列	
5044
		#取得解析好的行項目陣列
5045
		$result["content"]["xLabelName"]=$spiltString["dataArray"];
5045
		$result["content"]["xLabelName"]=$spiltString["dataArray"];
5046
		
5046
 
5047
		#解析交叉表的結果(要回傳)
5047
		#解析交叉表的結果(要回傳)
5048
		
5048
 
5049
		#檢示分析好的資料
5049
		#檢示分析好的資料
5050
		#var_dump($getFileContent);
5050
		#var_dump($getFileContent);
5051
		
5051
 
5052
		#取得交叉分析的資料
5052
		#取得交叉分析的資料
5053
		#$getFileContent["fileContent"][2];
5053
		#$getFileContent["fileContent"][2];
5054
		
5054
 
5055
		#切割 $executeRresult["lineArray"][$i] 字串
5055
		#切割 $executeRresult["lineArray"][$i] 字串
5056
		#涵式說明:
5056
		#涵式說明:
5057
		#將固定格式的字串分開,並回傳分開的結果。
5057
		#將固定格式的字串分開,並回傳分開的結果。
5058
		#回傳的參數:
5058
		#回傳的參數:
5059
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5059
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 5064... Line 5064...
5064
		#必填的參數:
5064
		#必填的參數:
5065
		$conf["stringProcess.spiltString"]["stringIn"]=$getFileContent["fileContent"][2];#要處理的字串。
5065
		$conf["stringProcess.spiltString"]["stringIn"]=$getFileContent["fileContent"][2];#要處理的字串。
5066
		$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5066
		$conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
5067
		#備註:
5067
		#備註:
5068
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5068
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5069
		$spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]); 
5069
		$spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]);
5070
		unset($conf["stringProcess.spiltString"]);
5070
		unset($conf["stringProcess.spiltString"]);
5071
		
5071
 
5072
		#如果解析列項目字串失敗
5072
		#如果解析列項目字串失敗
5073
		if($spiltString["status"]=="false"){
5073
		if($spiltString["status"]=="false"){
5074
			
5074
 
5075
			#設置執行失敗
5075
			#設置執行失敗
5076
			$result["status"]="false";
5076
			$result["status"]="false";
5077
			
5077
 
5078
			#設置執行錯誤
5078
			#設置執行錯誤
5079
			$result["error"]=$spiltString;
5079
			$result["error"]=$spiltString;
5080
			
5080
 
5081
			#回傳結果
5081
			#回傳結果
5082
			return $result;
5082
			return $result;
5083
			
5083
 
5084
			}#if end
5084
			}#if end
5085
			
5085
 
5086
		#有幾個交叉表的元素就執行幾次迴圈
5086
		#有幾個交叉表的元素就執行幾次迴圈
5087
		for($j=0;$j<$spiltString["dataCounts"];$j++){
5087
		for($j=0;$j<$spiltString["dataCounts"];$j++){
5088
		
5088
 
5089
			(int)$xLabelNameKey=($j+1)/count($result["content"]["yLabelName"])-1;
5089
			(int)$xLabelNameKey=($j+1)/count($result["content"]["yLabelName"])-1;
5090
			(int)$yLabelNameKey=($j+1)/count($result["content"]["xLabelName"])-1;
5090
			(int)$yLabelNameKey=($j+1)/count($result["content"]["xLabelName"])-1;
5091
		
5091
 
5092
			#$result["content"][$i]["xLabelName"],交叉表從上致下,從左至右第$i+1個數值的x軸項目名稱.
5092
			#$result["content"][$i]["xLabelName"],交叉表從上致下,從左至右第$i+1個數值的x軸項目名稱.
5093
			#$result["content"][$i]["yLabelName"],交叉表從上致下,從左至右第$i+1個數值的y軸項目名稱.
5093
			#$result["content"][$i]["yLabelName"],交叉表從上致下,從左至右第$i+1個數值的y軸項目名稱.
5094
			#$result["content"][$i]["value"],交叉表從上致下,從左至右第$i+1個數值.
5094
			#$result["content"][$i]["value"],交叉表從上致下,從左至右第$i+1個數值.
5095
			
5095
 
5096
			#建立暫存的數值資訊陣列
5096
			#建立暫存的數值資訊陣列
5097
			#參考資料來源:
5097
			#參考資料來源:
5098
			#http://php.net/manual/en/function.array-combine.php
5098
			#http://php.net/manual/en/function.array-combine.php
5099
			$keys=array("xLabelName","yLabelName","value");
5099
			$keys=array("xLabelName","yLabelName","value");
5100
			$values=array($result["content"]["xLabelName"][$xLabelNameKey],$result["content"]["yLabelName"][$yLabelNameKey],$spiltString["dataArray"][$j]);
5100
			$values=array($result["content"]["xLabelName"][$xLabelNameKey],$result["content"]["yLabelName"][$yLabelNameKey],$spiltString["dataArray"][$j]);
5101
			$tempArray=array_combine($keys,$values);
5101
			$tempArray=array_combine($keys,$values);
5102
			
5102
 
5103
			#取得特定數值的資訊
5103
			#取得特定數值的資訊
5104
			$result["content"][]=$tempArray;
5104
			$result["content"][]=$tempArray;
5105
		
5105
 
5106
			#debug
5106
			#debug
5107
			#echo "<p>Entered!</p>";
5107
			#echo "<p>Entered!</p>";
5108
		
5108
 
5109
			}#for end
5109
			}#for end
5110
								
5110
 
5111
		#移除 ".R/table-".$_SESSION["username"]."-R-CatOutput" 檔案
5111
		#移除 ".R/table-".$_SESSION["username"]."-R-CatOutput" 檔案
5112
		#涵式說明:
5112
		#涵式說明:
5113
		#移除檔案
5113
		#移除檔案
5114
		#回傳的結果:
5114
		#回傳的結果:
5115
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
5115
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
Line 5120... Line 5120...
5120
		$conf["=fileAccess.delFile"]["fileAddress"]=".R/table-".$_SESSION["username"]."-R-CatOutput";#要移除檔案的位置
5120
		$conf["=fileAccess.delFile"]["fileAddress"]=".R/table-".$_SESSION["username"]."-R-CatOutput";#要移除檔案的位置
5121
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5121
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5122
		$conf["=fileAccess.delFile"]["fileArgu"]=$conf["fileArgu"];
5122
		$conf["=fileAccess.delFile"]["fileArgu"]=$conf["fileArgu"];
5123
		$delFile=fileAccess::delFile($conf["=fileAccess.delFile"]);
5123
		$delFile=fileAccess::delFile($conf["=fileAccess.delFile"]);
5124
		unset($conf["=fileAccess.delFile"]);
5124
		unset($conf["=fileAccess.delFile"]);
5125
		
5125
 
5126
		#如果移除檔案失敗
5126
		#如果移除檔案失敗
5127
		if($delFile["status"]=="false"){
5127
		if($delFile["status"]=="false"){
5128
			
5128
 
5129
			#設置執行失敗
5129
			#設置執行失敗
5130
			$result["status"]="false";
5130
			$result["status"]="false";
5131
			
5131
 
5132
			#設置執行錯誤
5132
			#設置執行錯誤
5133
			$result["error"]=$delFile;
5133
			$result["error"]=$delFile;
5134
			
5134
 
5135
			#回傳結果
5135
			#回傳結果
5136
			return $result;
5136
			return $result;
5137
			
5137
 
5138
			}#if end
5138
			}#if end
5139
		
5139
 
5140
		#取得執行的R腳本內容
5140
		#取得執行的R腳本內容
5141
		$result["RscriptContent"]=$executeRresult["RscriptContent"];
5141
		$result["RscriptContent"]=$executeRresult["RscriptContent"];
5142
								
5142
 
5143
		#如果 $conf["crossTableAddress"] 有設定
5143
		#如果 $conf["crossTableAddress"] 有設定
5144
		if(isset($conf["crossTableAddress"])){
5144
		if(isset($conf["crossTableAddress"])){
5145
		
5145
 
5146
			#如果 $conf["crossTableAddress"] 不為 ""
5146
			#如果 $conf["crossTableAddress"] 不為 ""
5147
			if($conf["crossTableAddress"]!=""){
5147
			if($conf["crossTableAddress"]!=""){
5148
				
5148
 
5149
				$conf["crossTableAddress"]=$conf["crossTableAddress"].".html";
5149
				$conf["crossTableAddress"]=$conf["crossTableAddress"].".html";
5150
				
5150
 
5151
				#建立顯示交叉表結果的html檔案
5151
				#建立顯示交叉表結果的html檔案
5152
				#函式說明:
5152
				#函式說明:
5153
				#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
5153
				#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
5154
				#回傳的結果:
5154
				#回傳的結果:
5155
				#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
5155
				#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
Line 5162... Line 5162...
5162
				$conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=$conf["crossTableAddress"];
5162
				$conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=$conf["crossTableAddress"];
5163
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5163
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5164
				$conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
5164
				$conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
5165
				$createHtmlFile=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
5165
				$createHtmlFile=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
5166
				unset($conf["fileAccess"]["createFileAfterCheck"]);
5166
				unset($conf["fileAccess"]["createFileAfterCheck"]);
5167
			
5167
 
5168
				#如果建立顯示交叉表結果的html檔案失敗
5168
				#如果建立顯示交叉表結果的html檔案失敗
5169
				if($createHtmlFile["status"]=="false"){
5169
				if($createHtmlFile["status"]=="false"){
5170
					
5170
 
5171
					#設置執行不正常的識別
5171
					#設置執行不正常的識別
5172
					$result["status"]="false";
5172
					$result["status"]="false";
5173
					
5173
 
5174
					#設置錯誤訊息
5174
					#設置錯誤訊息
5175
					$result["status"]=$createHtmlFile;
5175
					$result["status"]=$createHtmlFile;
5176
					
5176
 
5177
					#回傳結果
5177
					#回傳結果
5178
					return $result;
5178
					return $result;
5179
					
5179
 
5180
					}#if end
5180
					}#if end
5181
				
5181
 
5182
				#初始化表格的內容語法
5182
				#初始化表格的內容語法
5183
				$tableContent="<table border = 1px>";
5183
				$tableContent="<table border = 1px>";
5184
				
5184
 
5185
				#第一列開始
5185
				#第一列開始
5186
				$tableContent=$tableContent."<tr>";
5186
				$tableContent=$tableContent."<tr>";
5187
				
5187
 
5188
				#第一列第一個元素
5188
				#第一列第一個元素
5189
				$tableContent=$tableContent."<td>".$result["content"]["yLabelTypeName"]."\\".$result["content"]["xLabelTypeName"]."</td>";
5189
				$tableContent=$tableContent."<td>".$result["content"]["yLabelTypeName"]."\\".$result["content"]["xLabelTypeName"]."</td>";
5190
				
5190
 
5191
				#第一列後面其他的元素
5191
				#第一列後面其他的元素
5192
				
5192
 
5193
				#有幾個 $result["content"]["xLabelName"] 就執行幾次
5193
				#有幾個 $result["content"]["xLabelName"] 就執行幾次
5194
				for($i=0;$i<count($result["content"]["xLabelName"]);$i++){
5194
				for($i=0;$i<count($result["content"]["xLabelName"]);$i++){
5195
					
5195
 
5196
					$tableContent=$tableContent."<td>".$result["content"]["xLabelName"][$i]."</td>";
5196
					$tableContent=$tableContent."<td>".$result["content"]["xLabelName"][$i]."</td>";
5197
					
5197
 
5198
					}#for end
5198
					}#for end
5199
				
5199
 
5200
				#第一列結束
5200
				#第一列結束
5201
				$tableContent=$tableContent."</tr>";
5201
				$tableContent=$tableContent."</tr>";
5202
				
5202
 
5203
				#有幾個 $result["content"]["yLabelName"] 就執行幾次
5203
				#有幾個 $result["content"]["yLabelName"] 就執行幾次
5204
				for($i=0;$i<count($result["content"]["yLabelName"]);$i++){
5204
				for($i=0;$i<count($result["content"]["yLabelName"]);$i++){
5205
					
5205
 
5206
					#第$i+1列開始
5206
					#第$i+1列開始
5207
					$tableContent=$tableContent."<tr>";
5207
					$tableContent=$tableContent."<tr>";
5208
					
5208
 
5209
					#第$i+1列的名稱
5209
					#第$i+1列的名稱
5210
					$tableContent=$tableContent."<td>".$result["content"]["yLabelName"][$i]."</td>";
5210
					$tableContent=$tableContent."<td>".$result["content"]["yLabelName"][$i]."</td>";
5211
					
5211
 
5212
					#有幾個 $result["content"]["xLabelName"] 就執行幾次
5212
					#有幾個 $result["content"]["xLabelName"] 就執行幾次
5213
					for($j=0;$j<count($result["content"]["xLabelName"]);$j++){
5213
					for($j=0;$j<count($result["content"]["xLabelName"]);$j++){
5214
						
5214
 
5215
						#第$i+1列 第$j+1欄的 數值內容
5215
						#第$i+1列 第$j+1欄的 數值內容
5216
						$tableContent=$tableContent."<td>".$result["content"][($i*count($result["content"]["xLabelTypeName"])+$j)]["value"]."</td>";
5216
						$tableContent=$tableContent."<td>".$result["content"][($i*count($result["content"]["xLabelTypeName"])+$j)]["value"]."</td>";
5217
						
5217
 
5218
						}#for end
5218
						}#for end
5219
						
5219
 
5220
					#第$i+1列結束
5220
					#第$i+1列結束
5221
					$tableContent=$tableContent."</tr>";	
5221
					$tableContent=$tableContent."</tr>";
5222
					
5222
 
5223
					}#for end
5223
					}#for end
5224
				
5224
 
5225
				#表格語法的結束
5225
				#表格語法的結束
5226
				$tableContent=$tableContent."</table>";
5226
				$tableContent=$tableContent."</table>";
5227
				
5227
 
5228
				#寫入產生交叉表的html語法
5228
				#寫入產生交叉表的html語法
5229
				#涵式說明:
5229
				#涵式說明:
5230
				#將多行字串寫入到檔案
5230
				#將多行字串寫入到檔案
5231
				#回傳的結果:
5231
				#回傳的結果:
5232
				#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
5232
				#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
Line 5247... Line 5247...
5247
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5247
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5248
				$conf["fileAccess.writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
5248
				$conf["fileAccess.writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
5249
				#可省略的參數:
5249
				#可省略的參數:
5250
				#$conf["fileAccess.writeMultiLine"]["inputString"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
5250
				#$conf["fileAccess.writeMultiLine"]["inputString"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
5251
				$writeHtmlData=fileAccess::writeMultiLine($conf["fileAccess.writeMultiLine"]);
5251
				$writeHtmlData=fileAccess::writeMultiLine($conf["fileAccess.writeMultiLine"]);
5252
				unset($conf["fileAccess.writeMultiLine"]);														
5252
				unset($conf["fileAccess.writeMultiLine"]);
5253
				
5253
 
5254
				#如果 寫入html 語法失敗
5254
				#如果 寫入html 語法失敗
5255
				if($writeHtmlData["status"]=="false"){
5255
				if($writeHtmlData["status"]=="false"){
5256
					
5256
 
5257
					#設置執行不正常的識別
5257
					#設置執行不正常的識別
5258
					$result["status"]="false";
5258
					$result["status"]="false";
5259
					
5259
 
5260
					#設置錯誤訊息
5260
					#設置錯誤訊息
5261
					$result["status"]=$writeHtmlData;
5261
					$result["status"]=$writeHtmlData;
5262
					
5262
 
5263
					#回傳結果
5263
					#回傳結果
5264
					return $result;
5264
					return $result;
5265
					
5265
 
5266
					}#if end
5266
					}#if end
5267
				
5267
 
5268
				}#if end
5268
				}#if end
5269
		
5269
 
5270
			}#if end
5270
			}#if end
5271
		
5271
 
5272
		#如果有設定交叉表網頁檔的保存位置
5272
		#如果有設定交叉表網頁檔的保存位置
5273
		if(isset($conf["crossTableAddress"])){
5273
		if(isset($conf["crossTableAddress"])){
5274
			
5274
 
5275
			#取得網頁檔案位置	
5275
			#取得網頁檔案位置
5276
			$result["content"]["htmlAddress"]=$conf["crossTableAddress"];
5276
			$result["content"]["htmlAddress"]=$conf["crossTableAddress"];
5277
			
5277
 
5278
			}#if end
5278
			}#if end
5279
					
5279
 
5280
		#設置執行正常
5280
		#設置執行正常
5281
		$result["status"]="true";
5281
		$result["status"]="true";
5282
	
5282
 
5283
		#回傳結果
5283
		#回傳結果
5284
		return $result;
5284
		return $result;
5285
	
5285
 
5286
		}#function table end
5286
		}#function table end
5287
		
5287
 
5288
	/*
5288
	/*
5289
	#函式說明:
5289
	#函式說明:
5290
	#交叉分析,分析兩變數的關係,將結果輸出到html檔案裡面,其中若樣本數大於30則用卡方檢定,若樣本數小於30則用費雪精確獨立性檢定。
5290
	#交叉分析,分析兩變數的關係,將結果輸出到html檔案裡面,其中若樣本數大於30則用卡方檢定,若樣本數小於30則用費雪精確獨立性檢定。
5291
	#回傳結果:
5291
	#回傳結果:
5292
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
5292
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
5293
	#$result["error"],錯誤訊息陣列
5293
	#$result["error"],錯誤訊息陣列
5294
	#$result["function"],當前函數名稱
5294
	#$result["function"],當前函數名稱
5295
	#$result["content"],分析結果 
5295
	#$result["content"],分析結果
5296
	#$result["content"]["htmlReport"],報表網頁檔的位置
5296
	#$result["content"]["htmlReport"],報表網頁檔的位置
5297
	#$result["content"]["pairedDataCount"],觀察值的筆數
5297
	#$result["content"]["pairedDataCount"],觀察值的筆數
5298
	#$result["content"]["varAtype"],變數一的類別陣列
5298
	#$result["content"]["varAtype"],變數一的類別陣列
5299
	#$result["content"]["varBtype"],變數二的類別陣列
5299
	#$result["content"]["varBtype"],變數二的類別陣列
5300
	#$result["content"]["array"]["變數一類別之一"]["變數二類別之一"]["count"],變數一與變數二交叉位置的頻率
5300
	#$result["content"]["array"]["變數一類別之一"]["變數二類別之一"]["count"],變數一與變數二交叉位置的頻率
5301
	#$result["content"]["array"]["變數一類別之一"]["變數二類別之一"]["radio"],變數一與變數二交叉位置的比例
5301
	#$result["content"]["array"]["變數一類別之一"]["變數二類別之一"]["radio"],變數一與變數二交叉位置的比例
5302
	#$result["content"]["chi2"],卡方值,若不適用則為"null".
5302
	#$result["content"]["chi2"],卡方值,若不適用則為"null".
5303
	#$result["content"]["df"],自由度,若不適用則為"null"
5303
	#$result["content"]["df"],自由度,若不適用則為"null"
5304
	#$result["content"]["chi2pValue"],p值,若不適用則為"null"
5304
	#$result["content"]["chi2pValue"],p值,若不適用則為"null"
5305
	#$result["content"]["fisherTestVarRelationship"],取得費雪檢定的兩變數關係,若不適用則為"null"	
5305
	#$result["content"]["fisherTestVarRelationship"],取得費雪檢定的兩變數關係,若不適用則為"null"
5306
	#$result["content"]["fisherTestPvalue"],取得費雪檢定的p值,若不適用則為"null"
5306
	#$result["content"]["fisherTestPvalue"],取得費雪檢定的p值,若不適用則為"null"
5307
	#$result["content"]["rCode"],執行的R程式內容.
5307
	#$result["content"]["rCode"],執行的R程式內容.
5308
	#$result["content"]["rCodeFile"],#儲存輸出的R程式檔案位置與名稱.
5308
	#$result["content"]["rCodeFile"],#儲存輸出的R程式檔案位置與名稱.
5309
	#$result["content"]["rawOutput"],R原始的分析結果輸出.
5309
	#$result["content"]["rawOutput"],R原始的分析結果輸出.
5310
	#必填參數:
5310
	#必填參數:
Line 5329... Line 5329...
5329
	#費雪精確檢定=>http://www.r-web.com.tw/stat/step1.php?method=fisher_test
5329
	#費雪精確檢定=>http://www.r-web.com.tw/stat/step1.php?method=fisher_test
5330
	#備註:
5330
	#備註:
5331
	#取得比例有時會失敗
5331
	#取得比例有時會失敗
5332
	*/
5332
	*/
5333
	public static function crossTable(&$conf){
5333
	public static function crossTable(&$conf){
5334
		
5334
 
5335
		#初始化要回傳的內容
5335
		#初始化要回傳的內容
5336
		$result=array();
5336
		$result=array();
5337
		
5337
 
5338
		#取得當前函數名稱
5338
		#取得當前函數名稱
5339
		$result["function"]=__FUNCTION__;
5339
		$result["function"]=__FUNCTION__;
5340
		
5340
 
5341
		#如果 $conf 不為陣列
5341
		#如果 $conf 不為陣列
5342
		if(gettype($conf)!="array"){
5342
		if(gettype($conf)!="array"){
5343
			
5343
 
5344
			#設置執行失敗
5344
			#設置執行失敗
5345
			$result["status"]="false";
5345
			$result["status"]="false";
5346
			
5346
 
5347
			#設置執行錯誤訊息
5347
			#設置執行錯誤訊息
5348
			$result["error"][]="\$conf變數須為陣列形態";
5348
			$result["error"][]="\$conf變數須為陣列形態";
5349
 
5349
 
5350
			#如果傳入的參數為 null
5350
			#如果傳入的參數為 null
5351
			if($conf==null){
5351
			if($conf==null){
5352
				
5352
 
5353
				#設置執行錯誤訊息
5353
				#設置執行錯誤訊息
5354
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5354
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5355
				
5355
 
5356
				}#if end
5356
				}#if end
5357
 
5357
 
5358
			#回傳結果
5358
			#回傳結果
5359
			return $result;
5359
			return $result;
5360
			
5360
 
5361
			}#if end
5361
			}#if end
5362
		
5362
 
5363
		#如果 $_SESSION["username"] 不存在
5363
		#如果 $_SESSION["username"] 不存在
5364
		if(!isset($_SESSION["username"])){
5364
		if(!isset($_SESSION["username"])){
5365
			
5365
 
5366
			#設為"NULL"
5366
			#設為"NULL"
5367
			$_SESSION["username"]="NULL";
5367
			$_SESSION["username"]="NULL";
5368
			
5368
 
5369
			}#if end
5369
			}#if end
5370
		
5370
 
5371
		#檢查參數
5371
		#檢查參數
5372
		#函式說明:
5372
		#函式說明:
5373
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5373
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5374
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5374
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5375
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5375
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 5381... Line 5381...
5381
		#必填寫的參數:
5381
		#必填寫的參數:
5382
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5382
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5383
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5383
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5384
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5384
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5385
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dnnStr","dataArrayA","dataArrayB");
5385
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dnnStr","dataArrayA","dataArrayB");
5386
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5386
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
5387
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","array");
5387
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","array");
5388
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5388
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5389
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5389
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5390
		#可以省略的參數:
5390
		#可以省略的參數:
5391
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5391
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5392
		#$conf["canBeEmptyString"]="false";
5392
		#$conf["canBeEmptyString"]="false";
5393
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5393
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5394
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("crossTableAddress","title","outRfile");
5394
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("crossTableAddress","title","outRfile");
5395
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5395
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
5396
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
5396
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
5397
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5397
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5398
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".R/crossTable-".$_SESSION["username"],array("交叉表"),"null");
5398
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".R/crossTable-".$_SESSION["username"],array("交叉表"),"null");
5399
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5399
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5400
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("dataArrayA","dataArrayB");
5400
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("dataArrayA","dataArrayB");
5401
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5401
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5402
		unset($conf["variableCheck::checkArguments"]);
5402
		unset($conf["variableCheck::checkArguments"]);
5403
		
5403
 
5404
		#如果檢查失敗
5404
		#如果檢查失敗
5405
		if($checkArguments["status"]=="false"){
5405
		if($checkArguments["status"]=="false"){
5406
			
5406
 
5407
			#設置執行不正常
5407
			#設置執行不正常
5408
			$result["status"]="false";
5408
			$result["status"]="false";
5409
			
5409
 
5410
			#設置錯誤訊息
5410
			#設置錯誤訊息
5411
			$result["error"]=$checkArguments;
5411
			$result["error"]=$checkArguments;
5412
			
5412
 
5413
			#回傳結果
5413
			#回傳結果
5414
			return $result;
5414
			return $result;
5415
			
5415
 
5416
			}#if end
5416
			}#if end
5417
			
5417
 
5418
		#如果檢查不通過
5418
		#如果檢查不通過
5419
		if($checkArguments["passed"]=="false"){
5419
		if($checkArguments["passed"]=="false"){
5420
			
5420
 
5421
			#設置執行不正常
5421
			#設置執行不正常
5422
			$result["status"]="false";
5422
			$result["status"]="false";
5423
			
5423
 
5424
			#設置錯誤訊息
5424
			#設置錯誤訊息
5425
			$result["error"]=$checkArguments;
5425
			$result["error"]=$checkArguments;
5426
			
5426
 
5427
			#回傳結果
5427
			#回傳結果
5428
			return $result;
5428
			return $result;
5429
			
5429
 
5430
			}#if end
5430
			}#if end
5431
		
5431
 
5432
		#產生資料標題R語法字串
5432
		#產生資料標題R語法字串
5433
		$r_VarTitle="dnnStr=c(\"".$conf["dnnStr"][0]."\",\"".$conf["dnnStr"][1]."\")";
5433
		$r_VarTitle="dnnStr=c(\"".$conf["dnnStr"][0]."\",\"".$conf["dnnStr"][1]."\")";
5434
		
5434
 
5435
		#涵式說明:
5435
		#涵式說明:
5436
		#建立R檔案
5436
		#建立R檔案
5437
		#回傳的結果:
5437
		#回傳的結果:
5438
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
5438
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
5439
		#$result["error"],錯誤訊息陣列.
5439
		#$result["error"],錯誤訊息陣列.
Line 5445... Line 5445...
5445
		$conf["R::writeRfile"]["textToWrite"][]="library(gmodels)";
5445
		$conf["R::writeRfile"]["textToWrite"][]="library(gmodels)";
5446
		$conf["R::writeRfile"]["textToWrite"][]="";
5446
		$conf["R::writeRfile"]["textToWrite"][]="";
5447
		$conf["R::writeRfile"]["textToWrite"][]="#產生資料標題";
5447
		$conf["R::writeRfile"]["textToWrite"][]="#產生資料標題";
5448
		$conf["R::writeRfile"]["textToWrite"][]=$r_VarTitle;
5448
		$conf["R::writeRfile"]["textToWrite"][]=$r_VarTitle;
5449
		$conf["R::writeRfile"]["textToWrite"][]="";
5449
		$conf["R::writeRfile"]["textToWrite"][]="";
5450
		
5450
 
5451
		#從 $conf["dataArrayA"] 產生R資料變數
5451
		#從 $conf["dataArrayA"] 產生R資料變數
5452
		#涵式說明:
5452
		#涵式說明:
5453
		#避免超出4096bytes限制的條件下產生向量變數語法
5453
		#避免超出4096bytes限制的條件下產生向量變數語法
5454
		#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
5454
		#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
5455
		#回傳結果:
5455
		#回傳結果:
Line 5464... Line 5464...
5464
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayA"];
5464
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayA"];
5465
		#$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
5465
		#$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
5466
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R::writeRfile"]["textToWrite"];
5466
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R::writeRfile"]["textToWrite"];
5467
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
5467
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
5468
		unset($conf["R::createFixedVectorVar"]);
5468
		unset($conf["R::createFixedVectorVar"]);
5469
		
5469
 
5470
		#如果從 $conf["dataArrayA"] 產生R資料變數失敗
5470
		#如果從 $conf["dataArrayA"] 產生R資料變數失敗
5471
		if($createFixedVectorVar["status"]=="false"){
5471
		if($createFixedVectorVar["status"]=="false"){
5472
			
5472
 
5473
			#設置執行不正常
5473
			#設置執行不正常
5474
			$result["status"]="false";
5474
			$result["status"]="false";
5475
			
5475
 
5476
			#設置錯誤訊息
5476
			#設置錯誤訊息
5477
			$result["error"]=$createFixedVectorVar;
5477
			$result["error"]=$createFixedVectorVar;
5478
			
5478
 
5479
			#回傳結果
5479
			#回傳結果
5480
			return $result;
5480
			return $result;
5481
			
5481
 
5482
			}#if end
5482
			}#if end
5483
		
5483
 
5484
		$conf["R::writeRfile"]["textToWrite"][]="";
5484
		$conf["R::writeRfile"]["textToWrite"][]="";
5485
		
5485
 
5486
		#從 $conf["dataArrayB"] 產生R資料變數
5486
		#從 $conf["dataArrayB"] 產生R資料變數
5487
		#涵式說明:
5487
		#涵式說明:
5488
		#避免超出4096bytes限制的條件下產生向量變數語法
5488
		#避免超出4096bytes限制的條件下產生向量變數語法
5489
		#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
5489
		#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
5490
		#回傳結果:
5490
		#回傳結果:
Line 5499... Line 5499...
5499
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayB"];
5499
		$conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayB"];
5500
		#$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
5500
		#$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
5501
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R::writeRfile"]["textToWrite"];
5501
		$conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R::writeRfile"]["textToWrite"];
5502
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
5502
		$createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
5503
		unset($conf["R::createFixedVectorVar"]);
5503
		unset($conf["R::createFixedVectorVar"]);
5504
		
5504
 
5505
		#如果從 $conf["dataArrayB"] 產生R資料變數失敗
5505
		#如果從 $conf["dataArrayB"] 產生R資料變數失敗
5506
		if($createFixedVectorVar["status"]=="false"){
5506
		if($createFixedVectorVar["status"]=="false"){
5507
			
5507
 
5508
			#設置執行不正常
5508
			#設置執行不正常
5509
			$result["status"]="false";
5509
			$result["status"]="false";
5510
			
5510
 
5511
			#設置錯誤訊息
5511
			#設置錯誤訊息
5512
			$result["error"]=$createFixedVectorVar;
5512
			$result["error"]=$createFixedVectorVar;
5513
			
5513
 
5514
			#回傳結果
5514
			#回傳結果
5515
			return $result;
5515
			return $result;
5516
			
5516
 
5517
			}#if end
5517
			}#if end
5518
		
5518
 
5519
		$conf["R::writeRfile"]["textToWrite"][]="";
5519
		$conf["R::writeRfile"]["textToWrite"][]="";
5520
		
5520
 
5521
		#放置交叉分析的語法
5521
		#放置交叉分析的語法
5522
		$conf["R::writeRfile"]["textToWrite"][]="#交叉分析";
5522
		$conf["R::writeRfile"]["textToWrite"][]="#交叉分析";
5523
		
5523
 
5524
		#如果是小樣本(總樣本數30筆以下)
5524
		#如果是小樣本(總樣本數30筆以下)
5525
		if(count($conf["dataArrayA"])<30){
5525
		if(count($conf["dataArrayA"])<30){
5526
			
5526
 
5527
			$conf["R::writeRfile"]["textToWrite"][]="CrossTable(var1,var2,dnn=dnnStr,prop.t=FALSE,prop.c=FALSE,prop.chisq=FALSE,chisq=TRUE,fisher=TRUE)";
5527
			$conf["R::writeRfile"]["textToWrite"][]="CrossTable(var1,var2,dnn=dnnStr,prop.t=FALSE,prop.c=FALSE,prop.chisq=FALSE,chisq=TRUE,fisher=TRUE)";
5528
			
5528
 
5529
			}#if end
5529
			}#if end
5530
			
5530
 
5531
		#反之是大樣本	
5531
		#反之是大樣本
5532
		else{
5532
		else{
5533
			
5533
 
5534
			$conf["R::writeRfile"]["textToWrite"][]="CrossTable(var1,var2,dnn=dnnStr,prop.t=FALSE,prop.c=FALSE,prop.chisq=FALSE,chisq=TRUE,fisher=FALSE)";
5534
			$conf["R::writeRfile"]["textToWrite"][]="CrossTable(var1,var2,dnn=dnnStr,prop.t=FALSE,prop.c=FALSE,prop.chisq=FALSE,chisq=TRUE,fisher=FALSE)";
5535
			
5535
 
5536
			}#if end
5536
			}#if end
5537
				
5537
 
5538
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5538
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5539
		$conf["R::writeRfile"]["fileArgu"]=$conf["fileArgu"];	
5539
		$conf["R::writeRfile"]["fileArgu"]=$conf["fileArgu"];
5540
		$writeRfile=R::writeRfile($conf["R::writeRfile"]);
5540
		$writeRfile=R::writeRfile($conf["R::writeRfile"]);
5541
		unset($conf["R::writeRfile"]);
5541
		unset($conf["R::writeRfile"]);
5542
		
5542
 
5543
		#如果建立R腳本檔案失敗
5543
		#如果建立R腳本檔案失敗
5544
		if($writeRfile["status"]=="false"){
5544
		if($writeRfile["status"]=="false"){
5545
			
5545
 
5546
			#設置執行不正常
5546
			#設置執行不正常
5547
			$result["status"]="false";
5547
			$result["status"]="false";
5548
			
5548
 
5549
			#設置錯誤訊息
5549
			#設置錯誤訊息
5550
			$result["error"]=$writeRfile;
5550
			$result["error"]=$writeRfile;
5551
			
5551
 
5552
			#回傳結果
5552
			#回傳結果
5553
			return $result;
5553
			return $result;
5554
			
5554
 
5555
			}#if end
5555
			}#if end
5556
		
5556
 
5557
		#函式說明:
5557
		#函式說明:
5558
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
5558
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
5559
		#回傳的結果:
5559
		#回傳的結果:
5560
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5560
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5561
		#$result["errror"],錯誤訊息陣列
5561
		#$result["errror"],錯誤訊息陣列
Line 5570... Line 5570...
5570
		#可省略的參數:
5570
		#可省略的參數:
5571
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
5571
		#$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
5572
		#$conf["disbaleOptimal"]="true";
5572
		#$conf["disbaleOptimal"]="true";
5573
		$executeR=R::executeR($conf["R::executeR"]);
5573
		$executeR=R::executeR($conf["R::executeR"]);
5574
		unset($conf["R::executeR"]);
5574
		unset($conf["R::executeR"]);
5575
		
5575
 
5576
		#如果執行R腳本失敗
5576
		#如果執行R腳本失敗
5577
		if($executeR["status"]=="false"){
5577
		if($executeR["status"]=="false"){
5578
			
5578
 
5579
			#設置執行不正常
5579
			#設置執行不正常
5580
			$result["status"]="false";
5580
			$result["status"]="false";
5581
			
5581
 
5582
			#設置錯誤訊息
5582
			#設置錯誤訊息
5583
			$result["error"]=$executeR;
5583
			$result["error"]=$executeR;
5584
			
5584
 
5585
			#回傳結果
5585
			#回傳結果
5586
			return $result;
5586
			return $result;
5587
			
5587
 
5588
			}#if end
5588
			}#if end
5589
			
5589
 
5590
		#取得交叉分析的原始結果
5590
		#取得交叉分析的原始結果
5591
		$result["content"]["rawOutput"]=$executeR["lineArray"];
5591
		$result["content"]["rawOutput"]=$executeR["lineArray"];
5592
		
5592
 
5593
		#取得執行的R腳本內容
5593
		#取得執行的R腳本內容
5594
		$result["content"]["rCode"]=$executeR["RscriptContent"];
5594
		$result["content"]["rCode"]=$executeR["RscriptContent"];
5595
		
5595
 
5596
		#如果有設置 $conf["outRfile"]
5596
		#如果有設置 $conf["outRfile"]
5597
		if($conf["outRfile"]){
5597
		if($conf["outRfile"]){
5598
			
5598
 
5599
			#將 $result["content"]["rCode"] 內容寫入到 R 檔案裡面
5599
			#將 $result["content"]["rCode"] 內容寫入到 R 檔案裡面
5600
			#涵式說明:
5600
			#涵式說明:
5601
			#將多行字串寫入到檔案
5601
			#將多行字串寫入到檔案
5602
			#回傳的結果:
5602
			#回傳的結果:
5603
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
5603
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
Line 5612... Line 5612...
5612
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
5612
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
5613
			#可省略的參數:
5613
			#可省略的參數:
5614
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
5614
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
5615
			$outRfile=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
5615
			$outRfile=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
5616
			unset($conf["fileAccess::writeMultiLine"]);
5616
			unset($conf["fileAccess::writeMultiLine"]);
5617
			
5617
 
5618
			#如果輸出R腳本失敗
5618
			#如果輸出R腳本失敗
5619
			if($outRfile["status"]=="false"){
5619
			if($outRfile["status"]=="false"){
5620
				
5620
 
5621
				#設置執行不正常
5621
				#設置執行不正常
5622
				$result["status"]="false";
5622
				$result["status"]="false";
5623
				
5623
 
5624
				#設置錯誤訊息
5624
				#設置錯誤訊息
5625
				$result["error"]=$outRfile;
5625
				$result["error"]=$outRfile;
5626
				
5626
 
5627
				#回傳結果
5627
				#回傳結果
5628
				return $result;
5628
				return $result;
5629
				
5629
 
5630
				}#if end
5630
				}#if end
5631
				
5631
 
5632
			#儲存輸出的R程式檔案位置與名稱
5632
			#儲存輸出的R程式檔案位置與名稱
5633
			$result["content"]["rCodeFile"]=$conf["outRfile"].".R";
5633
			$result["content"]["rCodeFile"]=$conf["outRfile"].".R";
5634
			
5634
 
5635
			}#if end
5635
			}#if end
5636
		
5636
 
5637
		#初始化儲存資料分析的起點列數
5637
		#初始化儲存資料分析的起點列數
5638
		$rowStartLine=0;
5638
		$rowStartLine=0;
5639
		
5639
 
5640
		#有幾列輸出就執行幾次迴圈
5640
		#有幾列輸出就執行幾次迴圈
5641
		for($i=0;$i<$executeR["lineCount"];$i++){
5641
		for($i=0;$i<$executeR["lineCount"];$i++){
5642
			
5642
 
5643
			#var_dump($executeR["lineArray"][$i]);
5643
			#var_dump($executeR["lineArray"][$i]);
5644
			
5644
 
5645
			#定位到有 "Total Observations in Table:" 的列
5645
			#定位到有 "Total Observations in Table:" 的列
5646
			#函式說明:
5646
			#函式說明:
5647
			#檢查字串裡面有無指定的關鍵字
5647
			#檢查字串裡面有無指定的關鍵字
5648
			#回傳的結果:
5648
			#回傳的結果:
5649
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5649
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 5655... Line 5655...
5655
			$conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
5655
			$conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
5656
			#可省略的參數:
5656
			#可省略的參數:
5657
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5657
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5658
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
5658
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
5659
			unset($conf["search::findKeyWord"]);
5659
			unset($conf["search::findKeyWord"]);
5660
			
5660
 
5661
			#如果搜尋關鍵字失敗
5661
			#如果搜尋關鍵字失敗
5662
			if($findKeyWord["status"]=="false"){
5662
			if($findKeyWord["status"]=="false"){
5663
				
5663
 
5664
				#設置執行不正常
5664
				#設置執行不正常
5665
				$result["status"]="false";
5665
				$result["status"]="false";
5666
				
5666
 
5667
				#設置錯誤訊息
5667
				#設置錯誤訊息
5668
				$result["error"]=$findKeyWord;
5668
				$result["error"]=$findKeyWord;
5669
				
5669
 
5670
				#回傳結果
5670
				#回傳結果
5671
				return $result;
5671
				return $result;
5672
				
5672
 
5673
				}#if end
5673
				}#if end
5674
				
5674
 
5675
			#如果有找到關鍵字
5675
			#如果有找到關鍵字
5676
			if($findKeyWord["founded"]=="true"){
5676
			if($findKeyWord["founded"]=="true"){
5677
				
5677
 
5678
				#取得分析結果開始的列數
5678
				#取得分析結果開始的列數
5679
				$rowStartLine=$i;
5679
				$rowStartLine=$i;
5680
				
5680
 
5681
				#跳出迴圈
5681
				#跳出迴圈
5682
				break;
5682
				break;
5683
				
5683
 
5684
				}#if end
5684
				}#if end
5685
			
5685
 
5686
			}#for end
5686
			}#for end
5687
			
5687
 
5688
		#解析資料的筆數
5688
		#解析資料的筆數
5689
		
5689
 
5690
		#涵式說明:
5690
		#涵式說明:
5691
		#將固定格式的字串分開,並回傳分開的結果。
5691
		#將固定格式的字串分開,並回傳分開的結果。
5692
		#回傳的參數:
5692
		#回傳的參數:
5693
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5693
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5694
		#$result["error"],錯誤訊息陣列
5694
		#$result["error"],錯誤訊息陣列
Line 5700... Line 5700...
5700
		$conf["stringProcess::spiltString"]["spiltSymbol"]=":  ";#爲以哪個符號作爲分割
5700
		$conf["stringProcess::spiltString"]["spiltSymbol"]=":  ";#爲以哪個符號作爲分割
5701
		#備註:
5701
		#備註:
5702
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5702
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5703
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5703
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5704
		unset($conf["stringProcess::spiltString"]);
5704
		unset($conf["stringProcess::spiltString"]);
5705
		
5705
 
5706
		#如果分割字串失敗
5706
		#如果分割字串失敗
5707
		if($spiltString["status"]=="false"){
5707
		if($spiltString["status"]=="false"){
5708
			
5708
 
5709
			#設置執行不正常
5709
			#設置執行不正常
5710
			$result["status"]="false";
5710
			$result["status"]="false";
5711
				
5711
 
5712
			#設置錯誤訊息
5712
			#設置錯誤訊息
5713
			$result["error"]=$spiltString;
5713
			$result["error"]=$spiltString;
5714
				
5714
 
5715
			#回傳結果
5715
			#回傳結果
5716
			return $result;
5716
			return $result;
5717
			
5717
 
5718
			}#if end
5718
			}#if end
5719
			
5719
 
5720
		#取得觀察值筆數
5720
		#取得觀察值筆數
5721
		$result["content"]["pairedDataCount"]=$spiltString["dataArray"][1];
5721
		$result["content"]["pairedDataCount"]=$spiltString["dataArray"][1];
5722
							
5722
 
5723
		#取得變數一($conf["dataArrayA"])的種類
5723
		#取得變數一($conf["dataArrayA"])的種類
5724
		
5724
 
5725
		#初始化儲存變數一$conf["dataArrayA"])的種類
5725
		#初始化儲存變數一$conf["dataArrayA"])的種類
5726
		$result["content"]["varAtype"]=array();
5726
		$result["content"]["varAtype"]=array();
5727
		
5727
 
5728
		#debug
5728
		#debug
5729
		#var_dump($rowStartLine+6);
5729
		#var_dump($rowStartLine+6);
5730
		#var_dump($executeR["lineCount"]);
5730
		#var_dump($executeR["lineCount"]);
5731
		
5731
 
5732
		#執行迴圈直到遇到 "Column Total" 為止,一次加三
5732
		#執行迴圈直到遇到 "Column Total" 為止,一次加三
5733
		for($i=$rowStartLine+6;$i<$executeR["lineCount"];$i=$i+3){
5733
		for($i=$rowStartLine+6;$i<$executeR["lineCount"];$i=$i+3){
5734
			
5734
 
5735
			#echo "<p>entered!</p>";
5735
			#echo "<p>entered!</p>";
5736
			
5736
 
5737
			#涵式說明:
5737
			#涵式說明:
5738
			#將固定格式的字串分開,並回傳分開的結果。
5738
			#將固定格式的字串分開,並回傳分開的結果。
5739
			#回傳的參數:
5739
			#回傳的參數:
5740
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5740
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5741
			#$result["error"],錯誤訊息陣列
5741
			#$result["error"],錯誤訊息陣列
Line 5747... Line 5747...
5747
			$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
5747
			$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
5748
			#備註:
5748
			#備註:
5749
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5749
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5750
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5750
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5751
			unset($conf["stringProcess::spiltString"]);
5751
			unset($conf["stringProcess::spiltString"]);
5752
			
5752
 
5753
			#如果分割字串失敗
5753
			#如果分割字串失敗
5754
			if($spiltString["status"]=="false"){
5754
			if($spiltString["status"]=="false"){
5755
				
5755
 
5756
				#設置執行不正常
5756
				#設置執行不正常
5757
				$result["status"]="false";
5757
				$result["status"]="false";
5758
					
5758
 
5759
				#設置錯誤訊息
5759
				#設置錯誤訊息
5760
				$result["error"]=$spiltString;
5760
				$result["error"]=$spiltString;
5761
					
5761
 
5762
				#回傳結果
5762
				#回傳結果
5763
				return $result;
5763
				return $result;
5764
				
5764
 
5765
				}#if end
5765
				}#if end
5766
			
5766
 
5767
			#搜尋分割好的第一個字串是否有關鍵字 "Column Total"
5767
			#搜尋分割好的第一個字串是否有關鍵字 "Column Total"
5768
			#函式說明:
5768
			#函式說明:
5769
			#檢查字串裡面有無指定的關鍵字
5769
			#檢查字串裡面有無指定的關鍵字
5770
			#回傳的結果:
5770
			#回傳的結果:
5771
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5771
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 5777... Line 5777...
5777
			$conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
5777
			$conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
5778
			#可省略的參數:
5778
			#可省略的參數:
5779
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5779
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5780
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
5780
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
5781
			unset($conf["search::findKeyWord"]);
5781
			unset($conf["search::findKeyWord"]);
5782
			
5782
 
5783
			#如果尋找關鍵字失敗
5783
			#如果尋找關鍵字失敗
5784
			if($findKeyWord["status"]=="false"){
5784
			if($findKeyWord["status"]=="false"){
5785
				
5785
 
5786
				#設置執行不正常
5786
				#設置執行不正常
5787
				$result["status"]="false";
5787
				$result["status"]="false";
5788
					
5788
 
5789
				#設置錯誤訊息
5789
				#設置錯誤訊息
5790
				$result["error"]=$findKeyWord;
5790
				$result["error"]=$findKeyWord;
5791
					
5791
 
5792
				#回傳結果
5792
				#回傳結果
5793
				return $result;
5793
				return $result;
5794
				
5794
 
5795
				}#if end
5795
				}#if end
5796
				
5796
 
5797
			#如果有找到關鍵字 "Column Total"
5797
			#如果有找到關鍵字 "Column Total"
5798
			if($findKeyWord["founded"]=="true"){
5798
			if($findKeyWord["founded"]=="true"){
5799
				
5799
 
5800
				#跳出迴圈
5800
				#跳出迴圈
5801
				break;
5801
				break;
5802
				
5802
 
5803
				}#if end
5803
				}#if end
5804
			
5804
 
5805
			#剔除變數一類別字串的空白
5805
			#剔除變數一類別字串的空白
5806
			#涵式說明:
5806
			#涵式說明:
5807
			#處理字串避免網頁出錯
5807
			#處理字串避免網頁出錯
5808
			#回傳的結果:
5808
			#回傳的結果:
5809
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5809
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 5817... Line 5817...
5817
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5817
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5818
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5818
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5819
			$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5819
			$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5820
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5820
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5821
			unset($conf["stringProcess::correctCharacter"]);
5821
			unset($conf["stringProcess::correctCharacter"]);
5822
			
5822
 
5823
			#如果 處理類別字串失敗
5823
			#如果 處理類別字串失敗
5824
			if($correctCharacter["status"]=="false"){
5824
			if($correctCharacter["status"]=="false"){
5825
				
5825
 
5826
				#設置執行不正常
5826
				#設置執行不正常
5827
				$result["status"]="false";
5827
				$result["status"]="false";
5828
					
5828
 
5829
				#設置錯誤訊息
5829
				#設置錯誤訊息
5830
				$result["error"]=$correctCharacter;
5830
				$result["error"]=$correctCharacter;
5831
					
5831
 
5832
				#回傳結果
5832
				#回傳結果
5833
				return $result;
5833
				return $result;
5834
				
5834
 
5835
				}#if end
5835
				}#if end
5836
				
5836
 
5837
			#取得第一個變數的種類字串
5837
			#取得第一個變數的種類字串
5838
			$result["content"]["varAtype"][]=$correctCharacter["content"];
5838
			$result["content"]["varAtype"][]=$correctCharacter["content"];
5839
			
5839
 
5840
			}#for end
5840
			}#for end
5841
		
5841
 
5842
		#取得變數二($conf["dataArrayB"])的種類
5842
		#取得變數二($conf["dataArrayB"])的種類
5843
					
5843
 
5844
		#涵式說明:
5844
		#涵式說明:
5845
		#將固定格式的字串分開,並回傳分開的結果。
5845
		#將固定格式的字串分開,並回傳分開的結果。
5846
		#回傳的參數:
5846
		#回傳的參數:
5847
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5847
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5848
		#$result["error"],錯誤訊息陣列
5848
		#$result["error"],錯誤訊息陣列
Line 5854... Line 5854...
5854
		$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
5854
		$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
5855
		#備註:
5855
		#備註:
5856
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5856
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5857
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5857
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5858
		unset($conf["stringProcess::spiltString"]);
5858
		unset($conf["stringProcess::spiltString"]);
5859
		
5859
 
5860
		#如果分割字串失敗
5860
		#如果分割字串失敗
5861
		if($spiltString["status"]=="false"){
5861
		if($spiltString["status"]=="false"){
5862
			
5862
 
5863
			#設置執行不正常
5863
			#設置執行不正常
5864
			$result["status"]="false";
5864
			$result["status"]="false";
5865
				
5865
 
5866
			#設置錯誤訊息
5866
			#設置錯誤訊息
5867
			$result["error"]=$spiltString;
5867
			$result["error"]=$spiltString;
5868
				
5868
 
5869
			#回傳結果
5869
			#回傳結果
5870
			return $result;
5870
			return $result;
5871
			
5871
 
5872
			}#if end
5872
			}#if end
5873
			
5873
 
5874
		#初始化儲存變數二($conf["dataArrayB"])的種類
5874
		#初始化儲存變數二($conf["dataArrayB"])的種類
5875
		$result["content"]["varBtype"]=array();
5875
		$result["content"]["varBtype"]=array();
5876
			
5876
 
5877
		#執行 分割成的段數-2 次迴圈(亦即去頭去尾)
5877
		#執行 分割成的段數-2 次迴圈(亦即去頭去尾)
5878
		for($i=1;$i<$spiltString["dataCounts"]-1;$i++){
5878
		for($i=1;$i<$spiltString["dataCounts"]-1;$i++){
5879
			
5879
 
5880
			#剔除變數二類別字串的空白
5880
			#剔除變數二類別字串的空白
5881
			#涵式說明:
5881
			#涵式說明:
5882
			#處理字串避免網頁出錯
5882
			#處理字串避免網頁出錯
5883
			#回傳的結果:
5883
			#回傳的結果:
5884
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5884
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 5892... Line 5892...
5892
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5892
				#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
5893
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5893
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
5894
			$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5894
			$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
5895
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5895
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
5896
			unset($conf["stringProcess::correctCharacter"]);
5896
			unset($conf["stringProcess::correctCharacter"]);
5897
			
5897
 
5898
			#如果處理字串失敗
5898
			#如果處理字串失敗
5899
			if($correctCharacter["status"]=="false"){
5899
			if($correctCharacter["status"]=="false"){
5900
				
5900
 
5901
				#設置執行不正常
5901
				#設置執行不正常
5902
				$result["status"]="false";
5902
				$result["status"]="false";
5903
					
5903
 
5904
				#設置錯誤訊息
5904
				#設置錯誤訊息
5905
				$result["error"]=$correctCharacter;
5905
				$result["error"]=$correctCharacter;
5906
					
5906
 
5907
				#回傳結果
5907
				#回傳結果
5908
				return $result;
5908
				return $result;
5909
				
5909
 
5910
				}#if end
5910
				}#if end
5911
			
5911
 
5912
			#取得變數二類別
5912
			#取得變數二類別
5913
			$result["content"]["varBtype"][]=$correctCharacter["content"];
5913
			$result["content"]["varBtype"][]=$correctCharacter["content"];
5914
			
5914
 
5915
			}#for end	
5915
			}#for end
5916
		
5916
 
5917
		#$executeR["lineArray"][$rowStartLine]
5917
		#$executeR["lineArray"][$rowStartLine]
5918
		
5918
 
5919
		#依據變數一與二建立交叉分析數據的頻率
5919
		#依據變數一與二建立交叉分析數據的頻率
5920
						
5920
 
5921
		#執行迴圈直到遇到 "Column Total" 為止,一次加三
5921
		#執行迴圈直到遇到 "Column Total" 為止,一次加三
5922
		for($i=$rowStartLine+6;$i<$executeR["lineCount"];$i=$i+3){
5922
		for($i=$rowStartLine+6;$i<$executeR["lineCount"];$i=$i+3){
5923
			
5923
 
5924
			#涵式說明:
5924
			#涵式說明:
5925
			#將固定格式的字串分開,並回傳分開的結果。
5925
			#將固定格式的字串分開,並回傳分開的結果。
5926
			#回傳的參數:
5926
			#回傳的參數:
5927
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5927
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5928
			#$result["error"],錯誤訊息陣列
5928
			#$result["error"],錯誤訊息陣列
Line 5934... Line 5934...
5934
			$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
5934
			$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
5935
			#備註:
5935
			#備註:
5936
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5936
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
5937
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5937
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
5938
			unset($conf["stringProcess::spiltString"]);
5938
			unset($conf["stringProcess::spiltString"]);
5939
			
5939
 
5940
			#如果分割字串失敗
5940
			#如果分割字串失敗
5941
			if($spiltString["status"]=="false"){
5941
			if($spiltString["status"]=="false"){
5942
				
5942
 
5943
				#設置執行不正常
5943
				#設置執行不正常
5944
				$result["status"]="false";
5944
				$result["status"]="false";
5945
					
5945
 
5946
				#設置錯誤訊息
5946
				#設置錯誤訊息
5947
				$result["error"]=$spiltString;
5947
				$result["error"]=$spiltString;
5948
					
5948
 
5949
				#回傳結果
5949
				#回傳結果
5950
				return $result;
5950
				return $result;
5951
				
5951
 
5952
				}#if end
5952
				}#if end
5953
				
5953
 
5954
			#搜尋分割好的第一個字串是否有關鍵字 "Column Total"
5954
			#搜尋分割好的第一個字串是否有關鍵字 "Column Total"
5955
			#函式說明:
5955
			#函式說明:
5956
			#檢查字串裡面有無指定的關鍵字
5956
			#檢查字串裡面有無指定的關鍵字
5957
			#回傳的結果:
5957
			#回傳的結果:
5958
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
5958
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 5964... Line 5964...
5964
			$conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
5964
			$conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
5965
			#可省略的參數:
5965
			#可省略的參數:
5966
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5966
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
5967
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
5967
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
5968
			unset($conf["search::findKeyWord"]);
5968
			unset($conf["search::findKeyWord"]);
5969
			
5969
 
5970
			#如果尋找關鍵字失敗
5970
			#如果尋找關鍵字失敗
5971
			if($findKeyWord["status"]=="false"){
5971
			if($findKeyWord["status"]=="false"){
5972
				
5972
 
5973
				#設置執行不正常
5973
				#設置執行不正常
5974
				$result["status"]="false";
5974
				$result["status"]="false";
5975
					
5975
 
5976
				#設置錯誤訊息
5976
				#設置錯誤訊息
5977
				$result["error"]=$findKeyWord;
5977
				$result["error"]=$findKeyWord;
5978
					
5978
 
5979
				#回傳結果
5979
				#回傳結果
5980
				return $result;
5980
				return $result;
5981
				
5981
 
5982
				}#if end
5982
				}#if end
5983
				
5983
 
5984
			#如果有找到關鍵字 "Column Total"
5984
			#如果有找到關鍵字 "Column Total"
5985
			if($findKeyWord["founded"]=="true"){
5985
			if($findKeyWord["founded"]=="true"){
5986
				
5986
 
5987
				#跳出迴圈
5987
				#跳出迴圈
5988
				break;
5988
				break;
5989
				
5989
 
5990
				}#if end
5990
				}#if end
5991
			
5991
 
5992
			#debug
5992
			#debug
5993
			#echo "<p>entered!<p>";
5993
			#echo "<p>entered!<p>";
5994
			
5994
 
5995
			#執行 分割成的段數-2 次迴圈(亦即去頭去尾)
5995
			#執行 分割成的段數-2 次迴圈(亦即去頭去尾)
5996
			for($j=1;$j<$spiltString["dataCounts"]-1;$j++){
5996
			for($j=1;$j<$spiltString["dataCounts"]-1;$j++){
5997
				
5997
 
5998
				#debug
5998
				#debug
5999
				#echo "<p>entered!<p>";
5999
				#echo "<p>entered!<p>";
6000
				
6000
 
6001
				#剔除變數一類別字串的空白
6001
				#剔除變數一類別字串的空白
6002
				#涵式說明:
6002
				#涵式說明:
6003
				#處理字串避免網頁出錯
6003
				#處理字串避免網頁出錯
6004
				#回傳的結果:
6004
				#回傳的結果:
6005
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6005
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 6013... Line 6013...
6013
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6013
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6014
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6014
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6015
				$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6015
				$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6016
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6016
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6017
				unset($conf["stringProcess::correctCharacter"]);
6017
				unset($conf["stringProcess::correctCharacter"]);
6018
				
6018
 
6019
				#如果 處理類別字串失敗
6019
				#如果 處理類別字串失敗
6020
				if($correctCharacter["status"]=="false"){
6020
				if($correctCharacter["status"]=="false"){
6021
					
6021
 
6022
					#設置執行不正常
6022
					#設置執行不正常
6023
					$result["status"]="false";
6023
					$result["status"]="false";
6024
						
6024
 
6025
					#設置錯誤訊息
6025
					#設置錯誤訊息
6026
					$result["error"]=$correctCharacter;
6026
					$result["error"]=$correctCharacter;
6027
						
6027
 
6028
					#回傳結果
6028
					#回傳結果
6029
					return $result;
6029
					return $result;
6030
					
6030
 
6031
					}#if end
6031
					}#if end
6032
					
6032
 
6033
				#暫存變數一的名稱
6033
				#暫存變數一的名稱
6034
				$var1Name=$correctCharacter["content"];
6034
				$var1Name=$correctCharacter["content"];
6035
				
6035
 
6036
				#暫存變數二的名稱
6036
				#暫存變數二的名稱
6037
				$var2Name=$result["content"]["varBtype"][$j-1];
6037
				$var2Name=$result["content"]["varBtype"][$j-1];
6038
				
6038
 
6039
				#剔除變數一與類別二交叉的頻率字串的空白
6039
				#剔除變數一與類別二交叉的頻率字串的空白
6040
				#涵式說明:
6040
				#涵式說明:
6041
				#處理字串避免網頁出錯
6041
				#處理字串避免網頁出錯
6042
				#回傳的結果:
6042
				#回傳的結果:
6043
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6043
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 6051... Line 6051...
6051
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6051
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6052
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6052
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6053
				$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6053
				$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6054
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6054
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6055
				unset($conf["stringProcess::correctCharacter"]);
6055
				unset($conf["stringProcess::correctCharacter"]);
6056
				
6056
 
6057
				#如果 處理類別字串失敗
6057
				#如果 處理類別字串失敗
6058
				if($correctCharacter["status"]=="false"){
6058
				if($correctCharacter["status"]=="false"){
6059
					
6059
 
6060
					#設置執行不正常
6060
					#設置執行不正常
6061
					$result["status"]="false";
6061
					$result["status"]="false";
6062
						
6062
 
6063
					#設置錯誤訊息
6063
					#設置錯誤訊息
6064
					$result["error"]=$correctCharacter;
6064
					$result["error"]=$correctCharacter;
6065
						
6065
 
6066
					#回傳結果
6066
					#回傳結果
6067
					return $result;
6067
					return $result;
6068
					
6068
 
6069
					}#if end
6069
					}#if end
6070
					
6070
 
6071
				#取得頻率
6071
				#取得頻率
6072
				$result["content"]["array"][$var1Name][$var2Name]["count"]=$correctCharacter["content"];
6072
				$result["content"]["array"][$var1Name][$var2Name]["count"]=$correctCharacter["content"];
6073
								
6073
 
6074
				}#for end
6074
				}#for end
6075
			
6075
 
6076
			}#for end
6076
			}#for end
6077
		
6077
 
6078
		#依據變數一與二建立交叉分析數據的比例
6078
		#依據變數一與二建立交叉分析數據的比例
6079
						
6079
 
6080
		#執行迴圈直到遇到 "Column Total" 為止,一次加三
6080
		#執行迴圈直到遇到 "Column Total" 為止,一次加三
6081
		for($i=$rowStartLine+7;$i<$executeR["lineCount"];$i=$i+3){
6081
		for($i=$rowStartLine+7;$i<$executeR["lineCount"];$i=$i+3){
6082
		
6082
 
6083
			#debug
6083
			#debug
6084
			#echo "<p>entered!<p>";
6084
			#echo "<p>entered!<p>";
6085
		
6085
 
6086
			#涵式說明:
6086
			#涵式說明:
6087
			#將固定格式的字串分開,並回傳分開的結果。
6087
			#將固定格式的字串分開,並回傳分開的結果。
6088
			#回傳的參數:
6088
			#回傳的參數:
6089
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6089
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6090
			#$result["error"],錯誤訊息陣列
6090
			#$result["error"],錯誤訊息陣列
Line 6096... Line 6096...
6096
			$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
6096
			$conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
6097
			#備註:
6097
			#備註:
6098
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
6098
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
6099
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
6099
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
6100
			unset($conf["stringProcess::spiltString"]);
6100
			unset($conf["stringProcess::spiltString"]);
6101
			
6101
 
6102
			#debug
6102
			#debug
6103
			#var_dump($spiltString);
6103
			#var_dump($spiltString);
6104
							
6104
 
6105
			#如果分割字串失敗
6105
			#如果分割字串失敗
6106
			if($spiltString["status"]=="false"){
6106
			if($spiltString["status"]=="false"){
6107
				
6107
 
6108
				#設置執行不正常
6108
				#設置執行不正常
6109
				$result["status"]="false";
6109
				$result["status"]="false";
6110
					
6110
 
6111
				#設置錯誤訊息
6111
				#設置錯誤訊息
6112
				$result["error"]=$spiltString;
6112
				$result["error"]=$spiltString;
6113
					
6113
 
6114
				#回傳結果
6114
				#回傳結果
6115
				return $result;
6115
				return $result;
6116
				
6116
 
6117
				}#if end
6117
				}#if end
6118
				
6118
 
6119
			#搜尋分割好的第一個字串是否有關鍵字 "-"
6119
			#搜尋分割好的第一個字串是否有關鍵字 "-"
6120
			#函式說明:
6120
			#函式說明:
6121
			#檢查字串裡面有無指定的關鍵字
6121
			#檢查字串裡面有無指定的關鍵字
6122
			#回傳的結果:
6122
			#回傳的結果:
6123
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6123
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 6129... Line 6129...
6129
			$conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
6129
			$conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
6130
			#可省略的參數:
6130
			#可省略的參數:
6131
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6131
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6132
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
6132
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
6133
			unset($conf["search::findKeyWord"]);
6133
			unset($conf["search::findKeyWord"]);
6134
			
6134
 
6135
			#如果尋找關鍵字失敗
6135
			#如果尋找關鍵字失敗
6136
			if($findKeyWord["status"]=="false"){
6136
			if($findKeyWord["status"]=="false"){
6137
				
6137
 
6138
				#設置執行不正常
6138
				#設置執行不正常
6139
				$result["status"]="false";
6139
				$result["status"]="false";
6140
					
6140
 
6141
				#設置錯誤訊息
6141
				#設置錯誤訊息
6142
				$result["error"]=$findKeyWord;
6142
				$result["error"]=$findKeyWord;
6143
					
6143
 
6144
				#回傳結果
6144
				#回傳結果
6145
				return $result;
6145
				return $result;
6146
				
6146
 
6147
				}#if end
6147
				}#if end
6148
				
6148
 
6149
			#如果有找到關鍵字 "-"
6149
			#如果有找到關鍵字 "-"
6150
			if($findKeyWord["founded"]=="true"){
6150
			if($findKeyWord["founded"]=="true"){
6151
				
6151
 
6152
				#跳出迴圈
6152
				#跳出迴圈
6153
				break;
6153
				break;
6154
				
6154
 
6155
				}#if end
6155
				}#if end
6156
				
6156
 
6157
			#B變數有幾個類別就執行幾次
6157
			#B變數有幾個類別就執行幾次
6158
			for($j=0;$j<count($result["content"]["varBtype"]);$j++){
6158
			for($j=0;$j<count($result["content"]["varBtype"]);$j++){
6159
				
6159
 
6160
				#debug
6160
				#debug
6161
				#echo "<p>entered!<p>";
6161
				#echo "<p>entered!<p>";
6162
				
6162
 
6163
				#debug
6163
				#debug
6164
				#var_dump($spiltString);
6164
				#var_dump($spiltString);
6165
				
6165
 
6166
				#debug
6166
				#debug
6167
				#echo "\r\n".$spiltString["dataArray"][$j+1]."\r\n";
6167
				#echo "\r\n".$spiltString["dataArray"][$j+1]."\r\n";
6168
				
6168
 
6169
				#剔除變數A與B交叉的頻率比例字串的空白
6169
				#剔除變數A與B交叉的頻率比例字串的空白
6170
				#涵式說明:
6170
				#涵式說明:
6171
				#處理字串避免網頁出錯
6171
				#處理字串避免網頁出錯
6172
				#回傳的結果:
6172
				#回傳的結果:
6173
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6173
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 6181... Line 6181...
6181
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6181
					#若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
6182
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6182
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
6183
				$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6183
				$conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
6184
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6184
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
6185
				unset($conf["stringProcess::correctCharacter"]);
6185
				unset($conf["stringProcess::correctCharacter"]);
6186
				
6186
 
6187
				#debug
6187
				#debug
6188
				#echo "\r\n\$i=".$i." \$rowStartLine=".$rowStartLine." BtypeCount=".count($result["content"]["varBtype"])."\r\n";
6188
				#echo "\r\n\$i=".$i." \$rowStartLine=".$rowStartLine." BtypeCount=".count($result["content"]["varBtype"])."\r\n";
6189
				
6189
 
6190
				#debug
6190
				#debug
6191
				#echo "\r\n".($i-7-$rowStartLine)/(3)."\r\n";
6191
				#echo "\r\n".($i-7-$rowStartLine)/(3)."\r\n";
6192
				
6192
 
6193
				#debug
6193
				#debug
6194
				#echo "\r\n[".$result["content"]["varAtype"][(($i-7-$rowStartLine)/3)]."][".$result["content"]["varBtype"][$j]."][\"radio\"]=".$correctCharacter["content"]."\r\n";
6194
				#echo "\r\n[".$result["content"]["varAtype"][(($i-7-$rowStartLine)/3)]."][".$result["content"]["varBtype"][$j]."][\"radio\"]=".$correctCharacter["content"]."\r\n";
6195
				
6195
 
6196
				#debug
6196
				#debug
6197
				#var_dump($correctCharacter);
6197
				#var_dump($correctCharacter);
6198
				
6198
 
6199
				#如果剔除空白失敗
6199
				#如果剔除空白失敗
6200
				if($correctCharacter["status"]=="false"){
6200
				if($correctCharacter["status"]=="false"){
6201
					
6201
 
6202
					#設置執行不正常
6202
					#設置執行不正常
6203
					$result["status"]="false";
6203
					$result["status"]="false";
6204
						
6204
 
6205
					#設置錯誤訊息
6205
					#設置錯誤訊息
6206
					$result["error"]=$correctCharacter;
6206
					$result["error"]=$correctCharacter;
6207
						
6207
 
6208
					#回傳結果
6208
					#回傳結果
6209
					return $result;
6209
					return $result;
6210
					
6210
 
6211
					}#if end
6211
					}#if end
6212
				
6212
 
6213
				#取得變數A與B交叉的比例
6213
				#取得變數A與B交叉的比例
6214
				$result["content"]["array"][$result["content"]["varAtype"][($i-7-$rowStartLine)/(3)]][$result["content"]["varBtype"][$j]]["radio"]=$correctCharacter["content"];
6214
				$result["content"]["array"][$result["content"]["varAtype"][($i-7-$rowStartLine)/(3)]][$result["content"]["varBtype"][$j]]["radio"]=$correctCharacter["content"];
6215
				
6215
 
6216
				}#for end
6216
				}#for end
6217
		
6217
 
6218
			}#for end
6218
			}#for end
6219
		
6219
 
6220
		#初始化儲存卡方檢定結果開始的列數
6220
		#初始化儲存卡方檢定結果開始的列數
6221
		$chiSquaredStartRow=0;
6221
		$chiSquaredStartRow=0;
6222
		
6222
 
6223
		#尋找 "Pearson's Chi-squared test" 所在的列數
6223
		#尋找 "Pearson's Chi-squared test" 所在的列數
6224
		
6224
 
6225
		#有幾列輸出就執行幾次迴圈
6225
		#有幾列輸出就執行幾次迴圈
6226
		for($i=0;$i<$executeR["lineCount"];$i++){
6226
		for($i=0;$i<$executeR["lineCount"];$i++){
6227
			
6227
 
6228
			#定位到有 "Pearson's Chi-squared test" 的列
6228
			#定位到有 "Pearson's Chi-squared test" 的列
6229
			#函式說明:
6229
			#函式說明:
6230
			#檢查字串裡面有無指定的關鍵字
6230
			#檢查字串裡面有無指定的關鍵字
6231
			#回傳的結果:
6231
			#回傳的結果:
6232
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6232
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 6238... Line 6238...
6238
			$conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
6238
			$conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
6239
			#可省略的參數:
6239
			#可省略的參數:
6240
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6240
			#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6241
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
6241
			$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
6242
			unset($conf["search::findKeyWord"]);
6242
			unset($conf["search::findKeyWord"]);
6243
			
6243
 
6244
			#如果搜尋關鍵字失敗
6244
			#如果搜尋關鍵字失敗
6245
			if($findKeyWord["status"]=="false"){
6245
			if($findKeyWord["status"]=="false"){
6246
				
6246
 
6247
				#設置執行不正常
6247
				#設置執行不正常
6248
				$result["status"]="false";
6248
				$result["status"]="false";
6249
				
6249
 
6250
				#設置錯誤訊息
6250
				#設置錯誤訊息
6251
				$result["error"]=$findKeyWord;
6251
				$result["error"]=$findKeyWord;
6252
				
6252
 
6253
				#回傳結果
6253
				#回傳結果
6254
				return $result;
6254
				return $result;
6255
				
6255
 
6256
				}#if end
6256
				}#if end
6257
				
6257
 
6258
			#如果有找到關鍵字
6258
			#如果有找到關鍵字
6259
			if($findKeyWord["founded"]=="true"){
6259
			if($findKeyWord["founded"]=="true"){
6260
				
6260
 
6261
				#取得卡方檢定結果開始的列數
6261
				#取得卡方檢定結果開始的列數
6262
				$chiSquaredStartRow=$i;
6262
				$chiSquaredStartRow=$i;
6263
				
6263
 
6264
				#跳出迴圈
6264
				#跳出迴圈
6265
				break;
6265
				break;
6266
				
6266
 
6267
				}#if end
6267
				}#if end
6268
			
6268
 
6269
			}#for end
6269
			}#for end
6270
						
6270
 
6271
		#解析卡方檢定的結果
6271
		#解析卡方檢定的結果
6272
		#涵式說明:
6272
		#涵式說明:
6273
		#將固定格式的字串分開,並回傳分開的結果。
6273
		#將固定格式的字串分開,並回傳分開的結果。
6274
		#回傳的參數:
6274
		#回傳的參數:
6275
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6275
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 6282... Line 6282...
6282
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6282
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6283
		#備註:
6283
		#備註:
6284
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
6284
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
6285
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
6285
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
6286
		unset($conf["stringProcess::spiltString"]);
6286
		unset($conf["stringProcess::spiltString"]);
6287
		
6287
 
6288
		#如果分割字串失敗
6288
		#如果分割字串失敗
6289
		if($spiltString["status"]=="false"){
6289
		if($spiltString["status"]=="false"){
6290
			
6290
 
6291
			#設置執行不正常
6291
			#設置執行不正常
6292
			$result["status"]="false";
6292
			$result["status"]="false";
6293
				
6293
 
6294
			#設置錯誤訊息
6294
			#設置錯誤訊息
6295
			$result["error"]=$spiltString;
6295
			$result["error"]=$spiltString;
6296
				
6296
 
6297
			#回傳結果
6297
			#回傳結果
6298
			return $result;
6298
			return $result;
6299
			
6299
 
6300
			}#if end
6300
			}#if end
6301
			
6301
 
6302
		#取得卡方值
6302
		#取得卡方值
6303
		$result["content"]["chi2"]=$spiltString["dataArray"][2];
6303
		$result["content"]["chi2"]=$spiltString["dataArray"][2];
6304
		
6304
 
6305
		#取得自由度
6305
		#取得自由度
6306
		$result["content"]["df"]=$spiltString["dataArray"][5];
6306
		$result["content"]["df"]=$spiltString["dataArray"][5];
6307
		
6307
 
6308
		#取得p值
6308
		#取得p值
6309
		$result["content"]["chi2pValue"]=$spiltString["dataArray"][8];
6309
		$result["content"]["chi2pValue"]=$spiltString["dataArray"][8];
6310
		
6310
 
6311
		#如果是小樣本(總樣本數30筆以下)
6311
		#如果是小樣本(總樣本數30筆以下)
6312
		if(count($conf["dataArrayA"])<30){
6312
		if(count($conf["dataArrayA"])<30){
6313
				
6313
 
6314
			#初始化儲存費雪檢定結果開始的列數
6314
			#初始化儲存費雪檢定結果開始的列數
6315
			$fisherTestStartRow=0;
6315
			$fisherTestStartRow=0;
6316
			
6316
 
6317
			#尋找 "Fisher's Exact Test for Count Data" 所在的列數
6317
			#尋找 "Fisher's Exact Test for Count Data" 所在的列數
6318
			
6318
 
6319
			#有幾列輸出就執行幾次迴圈
6319
			#有幾列輸出就執行幾次迴圈
6320
			for($i=0;$i<$executeR["lineCount"];$i++){
6320
			for($i=0;$i<$executeR["lineCount"];$i++){
6321
				
6321
 
6322
				#定位到有 "Fisher's Exact Test for Count Data" 的列
6322
				#定位到有 "Fisher's Exact Test for Count Data" 的列
6323
				#函式說明:
6323
				#函式說明:
6324
				#檢查字串裡面有無指定的關鍵字
6324
				#檢查字串裡面有無指定的關鍵字
6325
				#回傳的結果:
6325
				#回傳的結果:
6326
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
6326
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
Line 6332... Line 6332...
6332
				$conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
6332
				$conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
6333
				#可省略的參數:
6333
				#可省略的參數:
6334
				#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6334
				#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
6335
				$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
6335
				$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
6336
				unset($conf["search::findKeyWord"]);
6336
				unset($conf["search::findKeyWord"]);
6337
				
6337
 
6338
				#如果搜尋關鍵字失敗
6338
				#如果搜尋關鍵字失敗
6339
				if($findKeyWord["status"]=="false"){
6339
				if($findKeyWord["status"]=="false"){
6340
					
6340
 
6341
					#設置執行不正常
6341
					#設置執行不正常
6342
					$result["status"]="false";
6342
					$result["status"]="false";
6343
					
6343
 
6344
					#設置錯誤訊息
6344
					#設置錯誤訊息
6345
					$result["error"]=$findKeyWord;
6345
					$result["error"]=$findKeyWord;
6346
					
6346
 
6347
					#回傳結果
6347
					#回傳結果
6348
					return $result;
6348
					return $result;
6349
					
6349
 
6350
					}#if end
6350
					}#if end
6351
					
6351
 
6352
				#如果有找到關鍵字
6352
				#如果有找到關鍵字
6353
				if($findKeyWord["founded"]=="true"){
6353
				if($findKeyWord["founded"]=="true"){
6354
					
6354
 
6355
					#取得費雪檢定結果開始的列數
6355
					#取得費雪檢定結果開始的列數
6356
					$fisherTestStartRow=$i;
6356
					$fisherTestStartRow=$i;
6357
					
6357
 
6358
					#跳出迴圈
6358
					#跳出迴圈
6359
					break;
6359
					break;
6360
					
6360
 
6361
					}#if end
6361
					}#if end
6362
				
6362
 
6363
				}#for end
6363
				}#for end
6364
				
6364
 
6365
			#取得費雪檢定的兩變數關係				
6365
			#取得費雪檢定的兩變數關係
6366
			$result["content"]["fisherTestVarRelationship"]=$executeR["lineArray"][$fisherTestStartRow+2];	
6366
			$result["content"]["fisherTestVarRelationship"]=$executeR["lineArray"][$fisherTestStartRow+2];
6367
				
6367
 
6368
			#解析費雪檢定結果	
6368
			#解析費雪檢定結果
6369
			#涵式說明:
6369
			#涵式說明:
6370
			#將固定格式的字串分開,並回傳分開的結果。
6370
			#將固定格式的字串分開,並回傳分開的結果。
6371
			#回傳的參數:
6371
			#回傳的參數:
6372
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6372
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6373
			#$result["error"],錯誤訊息陣列
6373
			#$result["error"],錯誤訊息陣列
Line 6379... Line 6379...
6379
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6379
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
6380
			#備註:
6380
			#備註:
6381
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
6381
			#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
6382
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
6382
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
6383
			unset($conf["stringProcess::spiltString"]);
6383
			unset($conf["stringProcess::spiltString"]);
6384
			
6384
 
6385
			#如果分割字串失敗
6385
			#如果分割字串失敗
6386
			if($spiltString["status"]=="false"){
6386
			if($spiltString["status"]=="false"){
6387
				
6387
 
6388
				#設置執行不正常
6388
				#設置執行不正常
6389
				$result["status"]="false";
6389
				$result["status"]="false";
6390
					
6390
 
6391
				#設置錯誤訊息
6391
				#設置錯誤訊息
6392
				$result["error"]=$spiltString;
6392
				$result["error"]=$spiltString;
6393
					
6393
 
6394
				#回傳結果
6394
				#回傳結果
6395
				return $result;
6395
				return $result;
6396
				
6396
 
6397
				}#if end
6397
				}#if end
6398
											
6398
 
6399
			#取得費雪檢定的p值
6399
			#取得費雪檢定的p值
6400
			$result["content"]["fisherTestPvalue"]=$spiltString["dataArray"][2];
6400
			$result["content"]["fisherTestPvalue"]=$spiltString["dataArray"][2];
6401
			
6401
 
6402
			}#if end
6402
			}#if end
6403
			
6403
 
6404
		#反之是大於30筆樣本的大樣本
6404
		#反之是大於30筆樣本的大樣本
6405
		else{
6405
		else{
6406
							
6406
 
6407
			#取得費雪檢定的兩變數關係				
6407
			#取得費雪檢定的兩變數關係
6408
			$result["content"]["fisherTestVarRelationship"]="不適用於大樣本";
6408
			$result["content"]["fisherTestVarRelationship"]="不適用於大樣本";
6409
			
6409
 
6410
			#取得費雪檢定的p值
6410
			#取得費雪檢定的p值
6411
			$result["content"]["fisherTestPvalue"]="不適用於大樣本";
6411
			$result["content"]["fisherTestPvalue"]="不適用於大樣本";
6412
			
6412
 
6413
			}#else end
6413
			}#else end
6414
					
6414
 
6415
		#輸出網頁檔的位置
6415
		#輸出網頁檔的位置
6416
		#$conf["crossTableAddress"]
6416
		#$conf["crossTableAddress"]
6417
		
6417
 
6418
		#初始化儲存交叉分析表標題的字串
6418
		#初始化儲存交叉分析表標題的字串
6419
		$title="";
6419
		$title="";
6420
		
6420
 
6421
		#標題陣列變數有幾個就執行幾次迴圈
6421
		#標題陣列變數有幾個就執行幾次迴圈
6422
		for($i=0;$i<count($conf["title"]);$i++){
6422
		for($i=0;$i<count($conf["title"]);$i++){
6423
			
6423
 
6424
			#如果是最後一個元素
6424
			#如果是最後一個元素
6425
			if($i==count($conf["title"])-1){
6425
			if($i==count($conf["title"])-1){
6426
			
6426
 
6427
				$title=$title.$conf["title"][$i]."<p>";
6427
				$title=$title.$conf["title"][$i]."<p>";
6428
				
6428
 
6429
				}#if end
6429
				}#if end
6430
				
6430
 
6431
			#反之不是最後一個元素
6431
			#反之不是最後一個元素
6432
			else{
6432
			else{
6433
				
6433
 
6434
				$title=$title.$conf["title"][$i]."<br>";
6434
				$title=$title.$conf["title"][$i]."<br>";
6435
				
6435
 
6436
				}#else end
6436
				}#else end
6437
			
6437
 
6438
			}#for end
6438
			}#for end
6439
		
6439
 
6440
		#初始化交叉分析表格呈現的html語法
6440
		#初始化交叉分析表格呈現的html語法
6441
		$tableContent="<table border = 1px>";
6441
		$tableContent="<table border = 1px>";
6442
				
6442
 
6443
		#第一列開始
6443
		#第一列開始
6444
		$tableContent=$tableContent."<tr>";
6444
		$tableContent=$tableContent."<tr>";
6445
		
6445
 
6446
		#第一列欄開始
6446
		#第一列欄開始
6447
		$tableContent=$tableContent."<td>".$conf["dnnStr"][0]."\\".$conf["dnnStr"][1]."</td>";
6447
		$tableContent=$tableContent."<td>".$conf["dnnStr"][0]."\\".$conf["dnnStr"][1]."</td>";
6448
		
6448
 
6449
		#第一列變數B的種類名稱
6449
		#第一列變數B的種類名稱
6450
		for($i=0;$i<count($result["content"]["varBtype"]);$i++){
6450
		for($i=0;$i<count($result["content"]["varBtype"]);$i++){
6451
			
6451
 
6452
			$tableContent=$tableContent."<td>".$result["content"]["varBtype"][$i]."</td>";
6452
			$tableContent=$tableContent."<td>".$result["content"]["varBtype"][$i]."</td>";
6453
			
6453
 
6454
			}#for end
6454
			}#for end
6455
			
6455
 
6456
		#第一列結束
6456
		#第一列結束
6457
		$tableContent=$tableContent."</tr>";
6457
		$tableContent=$tableContent."</tr>";
6458
		
6458
 
6459
		#變數A有幾類就執行幾次
6459
		#變數A有幾類就執行幾次
6460
		for($i=0;$i<count($result["content"]["varAtype"]);$i++){
6460
		for($i=0;$i<count($result["content"]["varAtype"]);$i++){
6461
			
6461
 
6462
			#列的開始
6462
			#列的開始
6463
			$tableContent=$tableContent."<tr>";
6463
			$tableContent=$tableContent."<tr>";
6464
		
6464
 
6465
			#放置變數A的類別名稱
6465
			#放置變數A的類別名稱
6466
			$tableContent=$tableContent."<td>".$result["content"]["varAtype"][$i]."</td>";
6466
			$tableContent=$tableContent."<td>".$result["content"]["varAtype"][$i]."</td>";
6467
		
6467
 
6468
			#變數B有幾種就執行幾次
6468
			#變數B有幾種就執行幾次
6469
			for($k=0;$k<count($result["content"]["varBtype"]);$k++){
6469
			for($k=0;$k<count($result["content"]["varBtype"]);$k++){
6470
				
6470
 
6471
				#如果沒有比比例數值
6471
				#如果沒有比比例數值
6472
				if(!isset($result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"])){
6472
				if(!isset($result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"])){
6473
					
6473
 
6474
					#預設為"0.0"
6474
					#預設為"0.0"
6475
					$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"]="0.0";
6475
					$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"]="0.0";
6476
					
6476
 
6477
					}#if end
6477
					}#if end
6478
				
6478
 
6479
				#欄的內容
6479
				#欄的內容
6480
				$tableContent=$tableContent."<td>".$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["count"]."<=>".$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"]."</td>";
6480
				$tableContent=$tableContent."<td>".$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["count"]."<=>".$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"]."</td>";
6481
				
6481
 
6482
				}#for end
6482
				}#for end
6483
				
6483
 
6484
			#列的結束
6484
			#列的結束
6485
			$tableContent=$tableContent."</tr>";	
6485
			$tableContent=$tableContent."</tr>";
6486
										
6486
 
6487
			}#for end
6487
			}#for end
6488
			
6488
 
6489
		#表格結束
6489
		#表格結束
6490
		$tableContent=$tableContent."</table>";
6490
		$tableContent=$tableContent."</table>";
6491
			
6491
 
6492
		#建立網頁檔
6492
		#建立網頁檔
6493
		#涵式說明:
6493
		#涵式說明:
6494
		#將多行字串寫入到檔案
6494
		#將多行字串寫入到檔案
6495
		#回傳的結果:
6495
		#回傳的結果:
6496
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
6496
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
Line 6515... Line 6515...
6515
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6515
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6516
		$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
6516
		$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
6517
		#可省略的參數:
6517
		#可省略的參數:
6518
		#$conf["fileAccess::writeMultiLine"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
6518
		#$conf["fileAccess::writeMultiLine"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
6519
		$createHtmlReport=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
6519
		$createHtmlReport=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
6520
		unset($conf["fileAccess::writeMultiLine"]);	
6520
		unset($conf["fileAccess::writeMultiLine"]);
6521
		
6521
 
6522
		#如果建立交叉分析報表網頁檔失敗
6522
		#如果建立交叉分析報表網頁檔失敗
6523
		if($createHtmlReport["status"]=="false"){
6523
		if($createHtmlReport["status"]=="false"){
6524
			
6524
 
6525
			#設置執行不正常
6525
			#設置執行不正常
6526
			$result["status"]="false";
6526
			$result["status"]="false";
6527
				
6527
 
6528
			#設置錯誤訊息
6528
			#設置錯誤訊息
6529
			$result["error"]=$createHtmlReport;
6529
			$result["error"]=$createHtmlReport;
6530
				
6530
 
6531
			#回傳結果
6531
			#回傳結果
6532
			return $result;
6532
			return $result;
6533
			
6533
 
6534
			}#if end		
6534
			}#if end
6535
 
6535
 
6536
		#取得產生的網頁檔位置
6536
		#取得產生的網頁檔位置
6537
		$result["content"]["htmlReport"]=$conf["crossTableAddress"].".html";
6537
		$result["content"]["htmlReport"]=$conf["crossTableAddress"].".html";
6538
 
6538
 
6539
		#設置執行正常
6539
		#設置執行正常
6540
		$result["status"]="true";
6540
		$result["status"]="true";
6541
		
6541
 
6542
		#回傳結果
6542
		#回傳結果
6543
		return $result;
6543
		return $result;
6544
		
6544
 
6545
		}#function crossTable end
6545
		}#function crossTable end
6546
		
6546
 
6547
	/*
6547
	/*
6548
	#函式說明:
6548
	#函式說明:
6549
	#運用線性模式進行關聯分析
6549
	#運用線性模式進行關聯分析
6550
	#回傳結果:
6550
	#回傳結果:
6551
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
6551
	#$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
Line 6566... Line 6566...
6566
	#備註:
6566
	#備註:
6567
	#建構中...
6567
	#建構中...
6568
	#目前考慮停止開發,因爲無法用名目尺度去推論。
6568
	#目前考慮停止開發,因爲無法用名目尺度去推論。
6569
	*/
6569
	*/
6570
	public static function lm(&$conf){
6570
	public static function lm(&$conf){
6571
		
6571
 
6572
		#初始化要回傳的結果
6572
		#初始化要回傳的結果
6573
		$result=array();
6573
		$result=array();
6574
		
6574
 
6575
		#如果 $conf 不等於 "array"
6575
		#如果 $conf 不等於 "array"
6576
		if(gettype($conf)!="array"){				
6576
		if(gettype($conf)!="array"){
6577
			
6577
 
6578
			#設定錯誤識別
6578
			#設定錯誤識別
6579
			$result["status"]="false";
6579
			$result["status"]="false";
6580
			
6580
 
6581
			#設置錯誤訊息
6581
			#設置錯誤訊息
6582
			$result["error"]="參數的Key指定有誤!";
6582
			$result["error"]="參數的Key指定有誤!";
6583
			
6583
 
6584
			#如果傳入的參數為 null
6584
			#如果傳入的參數為 null
6585
			if($conf==null){
6585
			if($conf==null){
6586
				
6586
 
6587
				#設置執行錯誤訊息
6587
				#設置執行錯誤訊息
6588
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6588
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6589
				
6589
 
6590
				}#if end
6590
				}#if end
6591
			
6591
 
6592
			#回傳結果
6592
			#回傳結果
6593
			return $result;
6593
			return $result;
6594
			
6594
 
6595
			}#if end
6595
			}#if end
6596
		
6596
 
6597
		#檢查必填參數
6597
		#檢查必填參數
6598
		#涵式說明:
6598
		#涵式說明:
6599
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6599
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6600
		#回傳的結果:
6600
		#回傳的結果:
6601
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6601
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 6607... Line 6607...
6607
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6607
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6608
		#必填寫的參數:
6608
		#必填寫的參數:
6609
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6609
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6610
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFile","factorVarNameArray","forcastVarName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6610
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFile","factorVarNameArray","forcastVarName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6611
		#可以省略的參數:
6611
		#可以省略的參數:
6612
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","name");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6612
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","name");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");
6613
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6613
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6614
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6614
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6615
		unset($conf["variableCheck.isexistMulti"]);
6615
		unset($conf["variableCheck.isexistMulti"]);
6616
		
6616
 
6617
		#如果檢查失敗
6617
		#如果檢查失敗
6618
		if($checkResult["status"]=="false"){
6618
		if($checkResult["status"]=="false"){
6619
			
6619
 
6620
			#設置執行不正常
6620
			#設置執行不正常
6621
			$result["status"]="false";
6621
			$result["status"]="false";
6622
			
6622
 
6623
			#設置執行錯誤訊息
6623
			#設置執行錯誤訊息
6624
			$result["error"]=$checkResult;
6624
			$result["error"]=$checkResult;
6625
			
6625
 
6626
			#回傳結果
6626
			#回傳結果
6627
			return $result;
6627
			return $result;
6628
			
6628
 
6629
			}#if end
6629
			}#if end
6630
			
6630
 
6631
		#如果檢查不通過
6631
		#如果檢查不通過
6632
		if($checkResult["passed"]=="false"){
6632
		if($checkResult["passed"]=="false"){
6633
			
6633
 
6634
			#設置執行不正常
6634
			#設置執行不正常
6635
			$result["status"]="false";
6635
			$result["status"]="false";
6636
			
6636
 
6637
			#設置執行錯誤訊息
6637
			#設置執行錯誤訊息
6638
			$result["error"]=$checkResult;
6638
			$result["error"]=$checkResult;
6639
			
6639
 
6640
			#回傳結果
6640
			#回傳結果
6641
			return $result;
6641
			return $result;
6642
			
6642
 
6643
			}#if end
6643
			}#if end
6644
		
6644
 
6645
		#初始化要寫入到R腳本的逐行內容
6645
		#初始化要寫入到R腳本的逐行內容
6646
		$dataToWrite=array();
6646
		$dataToWrite=array();
6647
		
6647
 
6648
		$dataToWrite[]="#線性迴歸分析";
6648
		$dataToWrite[]="#線性迴歸分析";
6649
		
6649
 
6650
		#涵式說明:
6650
		#涵式說明:
6651
		#建立R檔案
6651
		#建立R檔案
6652
		#回傳的結果:
6652
		#回傳的結果:
6653
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
6653
		#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
6654
		#$result["error"],錯誤訊息陣列.
6654
		#$result["error"],錯誤訊息陣列.
Line 6656... Line 6656...
6656
		#必填的參數:
6656
		#必填的參數:
6657
		$conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-lm.R";#R檔案的位置與名稱
6657
		$conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-lm.R";#R檔案的位置與名稱
6658
		$conf["R.writeRfile"]["textToWrite"]=array("");#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
6658
		$conf["R.writeRfile"]["textToWrite"]=array("");#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
6659
		$writeRfileResult=R::writeRfile($conf["R.writeRfile"]);
6659
		$writeRfileResult=R::writeRfile($conf["R.writeRfile"]);
6660
		unset($conf["R.writeRfile"]);
6660
		unset($conf["R.writeRfile"]);
6661
		
6661
 
6662
		#如果 R 腳本寫入失敗
6662
		#如果 R 腳本寫入失敗
6663
		if($writeRfileResult["status"]=="false"){
6663
		if($writeRfileResult["status"]=="false"){
6664
			
6664
 
6665
			#設置執行不正常
6665
			#設置執行不正常
6666
			$result["status"]="false";
6666
			$result["status"]="false";
6667
			
6667
 
6668
			#設置錯誤訊息
6668
			#設置錯誤訊息
6669
			$result["error"]=$writeRfileResult;
6669
			$result["error"]=$writeRfileResult;
6670
			
6670
 
6671
			#回傳結果
6671
			#回傳結果
6672
			return $result;
6672
			return $result;
6673
			
6673
 
6674
			}#if end
6674
			}#if end
6675
			
6675
 
6676
		#取得R腳本的位置
6676
		#取得R腳本的位置
6677
		$rScriptAdd=$writeRfileResult["newCreatedRfilePathAndName"];
6677
		$rScriptAdd=$writeRfileResult["newCreatedRfilePathAndName"];
6678
		
6678
 
6679
		#執行R腳本
6679
		#執行R腳本
6680
		#函式說明:
6680
		#函式說明:
6681
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
6681
		#執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
6682
		#回傳的結果:
6682
		#回傳的結果:
6683
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6683
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 6690... Line 6690...
6690
		#可省略的參數:
6690
		#可省略的參數:
6691
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
6691
		#$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
6692
		#$conf["R.executeR"]["disbaleOptimal"]="true";
6692
		#$conf["R.executeR"]["disbaleOptimal"]="true";
6693
		$executeResult=R::executeR($conf["R.executeR"]);
6693
		$executeResult=R::executeR($conf["R.executeR"]);
6694
		unset($conf["R.executeR"]);
6694
		unset($conf["R.executeR"]);
6695
		
6695
 
6696
		#如果執行R腳本出錯
6696
		#如果執行R腳本出錯
6697
		if($executeResult["status"]=="false"){
6697
		if($executeResult["status"]=="false"){
6698
			
6698
 
6699
			#設置執行不正常
6699
			#設置執行不正常
6700
			$result["status"]="false";
6700
			$result["status"]="false";
6701
			
6701
 
6702
			#設置錯誤訊息
6702
			#設置錯誤訊息
6703
			$result["error"]=$executeResult;
6703
			$result["error"]=$executeResult;
6704
			
6704
 
6705
			#回傳結果
6705
			#回傳結果
6706
			return $result;
6706
			return $result;
6707
			
6707
 
6708
			}#if end
6708
			}#if end
6709
		
6709
 
6710
		}#function lm end
6710
		}#function lm end
6711
					
6711
 
6712
	/*
6712
	/*
6713
	#函式說明:
6713
	#函式說明:
6714
	#避免超出4096bytes限制的條件下產生向量變數語法
6714
	#避免超出4096bytes限制的條件下產生向量變數語法
6715
	#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
6715
	#請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
6716
	#回傳結果:
6716
	#回傳結果:
Line 6730... Line 6730...
6730
	#無.
6730
	#無.
6731
	#參考資料:
6731
	#參考資料:
6732
	#無.
6732
	#無.
6733
	#備註:
6733
	#備註:
6734
	#無.
6734
	#無.
6735
	*/	
6735
	*/
6736
	public static function createFixedVectorVar(&$conf){
6736
	public static function createFixedVectorVar(&$conf){
6737
		
6737
 
6738
		#初始化要回傳的內容
6738
		#初始化要回傳的內容
6739
		$result=array();
6739
		$result=array();
6740
		
6740
 
6741
		#取得當前函數名稱
6741
		#取得當前函數名稱
6742
		$result["function"]=__FUNCTION__;
6742
		$result["function"]=__FUNCTION__;
6743
		
6743
 
6744
		#如果 $conf 不為陣列
6744
		#如果 $conf 不為陣列
6745
		if(gettype($conf)!="array"){
6745
		if(gettype($conf)!="array"){
6746
			
6746
 
6747
			#設置執行失敗
6747
			#設置執行失敗
6748
			$result["status"]="false";
6748
			$result["status"]="false";
6749
			
6749
 
6750
			#設置執行錯誤訊息
6750
			#設置執行錯誤訊息
6751
			$result["error"][]="\$conf變數須為陣列形態";
6751
			$result["error"][]="\$conf變數須為陣列形態";
6752
 
6752
 
6753
			#如果傳入的參數為 null
6753
			#如果傳入的參數為 null
6754
			if($conf==null){
6754
			if($conf==null){
6755
				
6755
 
6756
				#設置執行錯誤訊息
6756
				#設置執行錯誤訊息
6757
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6757
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6758
				
6758
 
6759
				}#if end
6759
				}#if end
6760
 
6760
 
6761
			#回傳結果
6761
			#回傳結果
6762
			return $result;
6762
			return $result;
6763
			
6763
 
6764
			}#if end
6764
			}#if end
6765
		
6765
 
6766
		#初始化儲存建立R向量變數的語法陣列
6766
		#初始化儲存建立R向量變數的語法陣列
6767
		$result["rVectorCreate"]=array();
6767
		$result["rVectorCreate"]=array();
6768
		
6768
 
6769
		#檢查參數
6769
		#檢查參數
6770
		#函式說明:
6770
		#函式說明:
6771
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6771
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6772
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6772
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6773
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6773
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 6779... Line 6779...
6779
		#必填寫的參數:
6779
		#必填寫的參數:
6780
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6780
		#$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6781
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
6781
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
6782
		#$conf["variableCheck.checkArguments"]"mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6782
		#$conf["variableCheck.checkArguments"]"mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6783
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("vectorName","vectorData","writeTarget");
6783
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("vectorName","vectorData","writeTarget");
6784
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
6784
		#$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
6785
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","array","array");
6785
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","array","array");
6786
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6786
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6787
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
6787
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
6788
		#可以省略的參數:
6788
		#可以省略的參數:
6789
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
6789
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
6790
		#$conf["canBeEmptyString"]="false";
6790
		#$conf["canBeEmptyString"]="false";
6791
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
6791
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
6792
		#$conf["skipableVariableName"]=array();
6792
		#$conf["skipableVariableName"]=array();
6793
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
6793
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
6794
		#$conf["skipableVariableType"]=array();
6794
		#$conf["skipableVariableType"]=array();
6795
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6795
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6796
		#$conf["skipableVarDefaultValue"]=array("");
6796
		#$conf["skipableVarDefaultValue"]=array("");
6797
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
6797
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
6798
		#$conf["arrayCountEqualCheck"][]=array();
6798
		#$conf["arrayCountEqualCheck"][]=array();
6799
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
6799
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
6800
		unset($conf["variableCheck.checkArguments"]);
6800
		unset($conf["variableCheck.checkArguments"]);
6801
		
6801
 
6802
		#如果檢查失敗
6802
		#如果檢查失敗
6803
		if($checkResult["status"]=="false"){
6803
		if($checkResult["status"]=="false"){
6804
			
6804
 
6805
			#設置執行不正常
6805
			#設置執行不正常
6806
			$result["status"]="false";
6806
			$result["status"]="false";
6807
			
6807
 
6808
			#設置執行錯誤訊息
6808
			#設置執行錯誤訊息
6809
			$result["error"]=$checkResult;
6809
			$result["error"]=$checkResult;
6810
			
6810
 
6811
			#回傳結果
6811
			#回傳結果
6812
			return $result;
6812
			return $result;
6813
			
6813
 
6814
			}#if end
6814
			}#if end
6815
			
6815
 
6816
		#如果檢查不通過
6816
		#如果檢查不通過
6817
		if($checkResult["passed"]=="false"){
6817
		if($checkResult["passed"]=="false"){
6818
			
6818
 
6819
			#設置執行不正常
6819
			#設置執行不正常
6820
			$result["status"]="false";
6820
			$result["status"]="false";
6821
			
6821
 
6822
			#設置執行錯誤訊息
6822
			#設置執行錯誤訊息
6823
			$result["error"]=$checkResult;
6823
			$result["error"]=$checkResult;
6824
			
6824
 
6825
			#回傳結果
6825
			#回傳結果
6826
			return $result;
6826
			return $result;
6827
			
6827
 
6828
			}#if end
6828
			}#if end
6829
			
6829
 
6830
		#計算 $conf["vectorData"] 10個一組,可以有幾組
6830
		#計算 $conf["vectorData"] 10個一組,可以有幾組
6831
		(int)$groupsCount=count($conf["vectorData"])/10;
6831
		(int)$groupsCount=count($conf["vectorData"])/10;
6832
			
6832
 
6833
		#有幾組就執行幾次
6833
		#有幾組就執行幾次
6834
		for($i=0;$i<$groupsCount;$i++){
6834
		for($i=0;$i<$groupsCount;$i++){
6835
			
6835
 
6836
			#初始化暫存向量變數語法的變數
6836
			#初始化暫存向量變數語法的變數
6837
			$rVectorPart="vectorPart=c(";
6837
			$rVectorPart="vectorPart=c(";
6838
			
6838
 
6839
			#一次最多執行10次
6839
			#一次最多執行10次
6840
			for($j=$i*10;$j<($i+1)*10;$j++){
6840
			for($j=$i*10;$j<($i+1)*10;$j++){
6841
				
6841
 
6842
				#如果已經讀完全部的向量變數了
6842
				#如果已經讀完全部的向量變數了
6843
				if(!isset($conf["vectorData"][$j])){
6843
				if(!isset($conf["vectorData"][$j])){
6844
					
6844
 
6845
					#debug
6845
					#debug
6846
					#echo "entered!";
6846
					#echo "entered!";
6847
					
6847
 
6848
					#結束向量變數語法
6848
					#結束向量變數語法
6849
					$rVectorPart=$rVectorPart.")";
6849
					$rVectorPart=$rVectorPart.")";
6850
					
6850
 
6851
					#跳出迴圈
6851
					#跳出迴圈
6852
					break;
6852
					break;
6853
					
6853
 
6854
					}#if end
6854
					}#if end
6855
				
6855
 
6856
				#如果是該組第一個向量資料
6856
				#如果是該組第一個向量資料
6857
				if($j==$i*10){
6857
				if($j==$i*10){
6858
																						
-
 
-
 
6858
 
6859
					#串聯建立向量變數的語法
6859
					#串聯建立向量變數的語法
6860
					$rVectorPart=$rVectorPart."\"".$conf["vectorData"][$j]."\"";
6860
					$rVectorPart=$rVectorPart."\"".$conf["vectorData"][$j]."\"";
6861
				
6861
 
6862
					}#if end
6862
					}#if end
6863
					
6863
 
6864
				#反之不是該組第一個向量資料
6864
				#反之不是該組第一個向量資料
6865
				else{
6865
				else{
6866
					
6866
 
6867
					#串聯建立向量變數的語法,向量資料前要加一個逗號。
6867
					#串聯建立向量變數的語法,向量資料前要加一個逗號。
6868
					$rVectorPart=$rVectorPart.",\"".$conf["vectorData"][$j]."\"";
6868
					$rVectorPart=$rVectorPart.",\"".$conf["vectorData"][$j]."\"";
6869
					
6869
 
6870
					}#else end
6870
					}#else end
6871
				
6871
 
6872
				#如果是該組的最後一個向量內容
6872
				#如果是該組的最後一個向量內容
6873
				if($j==($i+1)*10-1){
6873
				if($j==($i+1)*10-1){
6874
					
6874
 
6875
					#結束向量變數語法
6875
					#結束向量變數語法
6876
					$rVectorPart=$rVectorPart.")";
6876
					$rVectorPart=$rVectorPart.")";
6877
					
6877
 
6878
					}#if end	
6878
					}#if end
6879
									
6879
 
6880
				}#for end
6880
				}#for end
6881
				
6881
 
6882
			#儲存產生部分向量變數內容的R語法
6882
			#儲存產生部分向量變數內容的R語法
6883
			$result["rVectorCreate"][]=$rVectorPart;
6883
			$result["rVectorCreate"][]=$rVectorPart;
6884
				
6884
 
6885
			#如果是第一組	
6885
			#如果是第一組
6886
			if($i==0){	
6886
			if($i==0){
6887
				
6887
 
6888
				#直接取得向量變數的內容
6888
				#直接取得向量變數的內容
6889
				$result["rVectorCreate"][]=$conf["vectorName"]."=vectorPart";
6889
				$result["rVectorCreate"][]=$conf["vectorName"]."=vectorPart";
6890
			
6890
 
6891
				}#if end
6891
				}#if end
6892
			
6892
 
6893
			#反之不是第一組
6893
			#反之不是第一組
6894
			else{
6894
			else{
6895
				
6895
 
6896
				#組合向量變數的內容
6896
				#組合向量變數的內容
6897
				$result["rVectorCreate"][]=$conf["vectorName"]."=c(".$conf["vectorName"].",vectorPart)";
6897
				$result["rVectorCreate"][]=$conf["vectorName"]."=c(".$conf["vectorName"].",vectorPart)";
6898
				
6898
 
6899
				}#else end
6899
				}#else end
6900
			
6900
 
6901
			}#for end
6901
			}#for end
6902
			
6902
 
6903
		#$result["rVectorCreate"]有幾個元素就執行幾次
6903
		#$result["rVectorCreate"]有幾個元素就執行幾次
6904
		for($i=0;$i<count($result["rVectorCreate"]);$i++){
6904
		for($i=0;$i<count($result["rVectorCreate"]);$i++){
6905
			
6905
 
6906
			#增加一列建立向量變數的語法
6906
			#增加一列建立向量變數的語法
6907
			$conf["writeTarget"][]=$result["rVectorCreate"][$i];
6907
			$conf["writeTarget"][]=$result["rVectorCreate"][$i];
6908
			
6908
 
6909
			}#for end
6909
			}#for end
6910
		
6910
 
6911
		#用了幾列程式完成向量變數的建立
6911
		#用了幾列程式完成向量變數的建立
6912
		$result["lineCount"]=count($result["rVectorCreate"]);
6912
		$result["lineCount"]=count($result["rVectorCreate"]);
6913
		
6913
 
6914
		#設置執行正常的識別
6914
		#設置執行正常的識別
6915
		$result["status"]="true";
6915
		$result["status"]="true";
6916
		
6916
 
6917
		#回傳結果
6917
		#回傳結果
6918
		return $result;
6918
		return $result;
6919
		
6919
 
6920
		}#function createFixedVectorVar end	
6920
		}#function createFixedVectorVar end
6921
	
6921
 
6922
	/*
6922
	/*
6923
	#函式說明:
6923
	#函式說明:
6924
	#求算相關係數(皮爾森係數),結果會回傳1數值。代表兩筆數據的相關層度,正值代表正相關;負值代表負相關。
6924
	#求算相關係數(皮爾森係數),結果會回傳1數值。代表兩筆數據的相關層度,正值代表正相關;負值代表負相關。
6925
	#回傳結果:
6925
	#回傳結果:
6926
	#$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
6926
	#$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
Line 6938... Line 6938...
6938
	#http://www.statmethods.net/stats/correlations.html
6938
	#http://www.statmethods.net/stats/correlations.html
6939
	#備註:
6939
	#備註:
6940
	#建構中
6940
	#建構中
6941
	*/
6941
	*/
6942
	public static function computeCorrelationCoefficientForNumbericData(&$conf){
6942
	public static function computeCorrelationCoefficientForNumbericData(&$conf){
6943
		
6943
 
6944
		#初始化要回傳的內容
6944
		#初始化要回傳的內容
6945
		$result=array();
6945
		$result=array();
6946
		
6946
 
6947
		#記錄當前執行的函數名稱
6947
		#記錄當前執行的函數名稱
6948
		$result["function"]=__FUNCTION__;
6948
		$result["function"]=__FUNCTION__;
6949
 
6949
 
6950
		#初始化要回傳的相關係數(皮爾森係數)
6950
		#初始化要回傳的相關係數(皮爾森係數)
6951
		$result["content"]="";
6951
		$result["content"]="";
6952
 
6952
 
6953
		#如果 $conf 不為陣列
6953
		#如果 $conf 不為陣列
6954
		if(gettype($conf)!="array"){
6954
		if(gettype($conf)!="array"){
6955
			
6955
 
6956
			#設置執行失敗
6956
			#設置執行失敗
6957
			$result["status"]="false";
6957
			$result["status"]="false";
6958
			
6958
 
6959
			#設置執行錯誤訊息
6959
			#設置執行錯誤訊息
6960
			$result["error"][]="\$conf變數須為陣列形態";
6960
			$result["error"][]="\$conf變數須為陣列形態";
6961
 
6961
 
6962
			#如果傳入的參數為 null
6962
			#如果傳入的參數為 null
6963
			if($conf==null){
6963
			if($conf==null){
6964
				
6964
 
6965
				#設置執行錯誤訊息
6965
				#設置執行錯誤訊息
6966
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6966
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6967
				
6967
 
6968
				}#if end
6968
				}#if end
6969
 
6969
 
6970
			#回傳結果
6970
			#回傳結果
6971
			return $result;
6971
			return $result;
6972
			
6972
 
6973
			}#if end
6973
			}#if end
6974
 
6974
 
6975
		#檢查參數
6975
		#檢查參數
6976
		#函式說明:
6976
		#函式說明:
6977
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6977
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
Line 6988... Line 6988...
6988
		#必填寫的參數:
6988
		#必填寫的參數:
6989
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6989
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6990
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
6990
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
6991
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6991
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6992
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArrayA","rawDataArrayB");
6992
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArrayA","rawDataArrayB");
6993
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
6993
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
6994
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
6994
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
6995
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6995
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6996
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
6996
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
6997
		#可以省略的參數:
6997
		#可以省略的參數:
6998
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
6998
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
6999
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
6999
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7000
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7000
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7001
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
7001
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
7002
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7002
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
7003
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
7003
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
7004
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7004
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7005
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
7005
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
7006
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7006
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7007
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("rawDataArrayA","rawDataArrayB");
7007
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("rawDataArrayA","rawDataArrayB");
Line 7010... Line 7010...
7010
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7010
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7011
		unset($conf["variableCheck::checkArguments"]);
7011
		unset($conf["variableCheck::checkArguments"]);
7012
 
7012
 
7013
		#如果檢查參數失敗
7013
		#如果檢查參數失敗
7014
		if($checkArguments["status"]=="false"){
7014
		if($checkArguments["status"]=="false"){
7015
			
7015
 
7016
			#設置執行失敗
7016
			#設置執行失敗
7017
			$result["status"]="false";
7017
			$result["status"]="false";
7018
			
7018
 
7019
			#設置執行錯誤訊息
7019
			#設置執行錯誤訊息
7020
			$result["error"]=$checkArguments;
7020
			$result["error"]=$checkArguments;
7021
 
7021
 
7022
			#回傳結果
7022
			#回傳結果
7023
			return $result;
7023
			return $result;
7024
			
7024
 
7025
			}#if end
7025
			}#if end
7026
			
7026
 
7027
		#如果檢查不通過
7027
		#如果檢查不通過
7028
		if($checkArguments["passed"]=="false"){
7028
		if($checkArguments["passed"]=="false"){
7029
			
7029
 
7030
			#設置執行失敗
7030
			#設置執行失敗
7031
			$result["status"]="false";
7031
			$result["status"]="false";
7032
			
7032
 
7033
			#設置執行錯誤訊息
7033
			#設置執行錯誤訊息
7034
			$result["error"]=$checkArguments;
7034
			$result["error"]=$checkArguments;
7035
 
7035
 
7036
			#回傳結果
7036
			#回傳結果
7037
			return $result;
7037
			return $result;
7038
			
7038
 
7039
			}#if end
7039
			}#if end
7040
			
7040
 
7041
		
7041
 
7042
		
7042
 
7043
		}#function computeCorrelationCoefficientForNumbericData end	
7043
		}#function computeCorrelationCoefficientForNumbericData end
7044
									
7044
 
7045
	}#class R end
7045
	}#class R end
7046
 
7046
 
7047
?>
7047
?>