Subversion Repositories qbpwcf-lib(archive)

Rev

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

Rev Author Line No. Line
1 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
625 liveuser 6
    Copyright (C) 2015~2024 Min-Jhin,Chen
1 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
244 liveuser 26
/*
27
類別說明:
28
跟數學計算有關的類別.
29
備註:
30
無.
31
*/
1 liveuser 32
class math{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
201 liveuser 44
	#可省略參數:
45
	#無.
1 liveuser 46
	#參考資料:
47
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
201 liveuser 48
	#備註:
49
	#無.
1 liveuser 50
	*/
51
	public function __call($method,$arguments){
52
 
53
		#取得當前執行的函式
54
		$result["function"]=__FUNCTION__;
55
 
56
		#設置執行不正常
57
		$result["status"]="false";
58
 
59
		#設置執行錯誤
60
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
61
 
62
		#設置所丟入的參數
63
		$result["error"][]=$arguments;
64
 
65
		#回傳結果
66
		return $result;
67
 
68
		}#function __call end
69
 
70
	/*
71
	#函式說明:
72
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
73
	#回傳結果:
74
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
75
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
76
	#$result["function"],當前執行的函式名稱.
77
	#必填參數:
78
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
79
	#$arguments,陣列,為呼叫方法時所用的參數.
201 liveuser 80
	#可省略參數:
81
	#無.
1 liveuser 82
	#參考資料:
201 liveuser 83
	#__callStatic=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
84
	#備註:
85
	#無.
1 liveuser 86
	*/
87
	public static function __callStatic($method,$arguments){
88
 
89
		#取得當前執行的函式
90
		$result["function"]=__FUNCTION__;
91
 
92
		#設置執行不正常
93
		$result["status"]="false";
94
 
95
		#設置執行錯誤
96
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
97
 
98
		#設置所丟入的參數
99
		$result["error"][]=$arguments;
100
 
101
		#回傳結果
102
		return $result;
103
 
104
		}#function __callStatic end
105
 
106
	/*
57 liveuser 107
	#函式說明:
1 liveuser 108
	#計算總和.
109
	#回傳結果:
110
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
111
	#$result["error"],錯誤訊息陣列.
112
	#$result["function"],當前執行的函數名稱.
113
	#$result["content"],總和.
57 liveuser 114
	#必填參數:
1 liveuser 115
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列
57 liveuser 116
	#可省略參數:
117
	#無.
1 liveuser 118
	#參考資料:
57 liveuser 119
	#array-sum=>http://php.net/manual/en/function.array-sum.ph
120
	#備註:
121
	#無.
1 liveuser 122
	*/
123
	public static function computeSum(&$conf){
124
 
125
		#初始化要回傳的內容
126
		$result=array();
127
 
128
		#記錄當前執行的函數名稱
129
		$result["function"]=__FUNCTION__;
130
 
131
		#如果 $conf 不為陣列
132
		if(gettype($conf)!="array"){
133
 
134
			#設置執行失敗
135
			$result["status"]="false";
136
 
137
			#設置執行錯誤訊息
138
			$result["error"][]="\$conf變數須為陣列形態";
139
 
140
			#如果傳入的參數為 null
141
			if($conf==null){
142
 
143
				#設置執行錯誤訊息
144
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
145
 
146
				}#if end
147
 
148
			#回傳結果
149
			return $result;
150
 
151
			}#if end
152
 
153
		#檢查參數
154
		#函式說明:
155
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
156
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
157
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
158
		#$result["function"],當前執行的函式名稱.
159
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
160
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
161
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
162
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
163
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
164
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
165
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
166
		#必填寫的參數:
167
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
168
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
169
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
170
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
171
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
172
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
173
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
174
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
175
		#可以省略的參數:
176
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
177
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
178
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
179
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
180
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
181
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
182
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
183
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
184
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
185
		#$conf["arrayCountEqualCheck"][]=array();
186
		#參考資料來源:
187
		#array_keys=>http://php.net/manual/en/function.array-keys.php
188
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
189
		unset($conf["variableCheck::checkArguments"]);
190
 
191
		#如果檢查參數失敗
192
		if($checkArguments["status"]=="false"){
193
 
194
			#設置執行失敗
195
			$result["status"]="false";
196
 
197
			#設置執行錯誤訊息
198
			$result["error"]=$checkArguments;
199
 
200
			#回傳結果
201
			return $result;
202
 
203
			}#if end
204
 
205
		#如果檢查不通過
206
		if($checkArguments["passed"]=="false"){
207
 
208
			#設置執行失敗
209
			$result["status"]="false";
210
 
211
			#設置執行錯誤訊息
212
			$result["error"]=$checkArguments;
213
 
214
			#回傳結果
215
			return $result;
216
 
217
			}#if end
218
 
219
		#加總陣列中的數字
220
		$sum=array_sum($conf["rawDataArray"]);
221
 
222
		#如果加總失敗
223
		if($sum==false){
224
 
225
			#設置執行失敗
226
			$result["status"]="false";
227
 
228
			#設置執行錯誤訊息
229
			$result["error"][]="加總失敗";
230
 
231
			#回傳結果
232
			return $result;
233
 
234
			}#if end
235
 
236
		#反之加總成功	
237
		else{
238
 
239
			#取得總和
240
			$result["content"]=$sum;
241
 
242
			}#else end
243
 
244
		#設置執行正常
245
		$result["status"]="true";
246
 
247
		#回傳總和
248
		return $result;
249
 
250
		}#function computeSum end
251
 
252
	/*
57 liveuser 253
	#函式說明:
254
	#計算平均數.
255
	#回傳結果:
1 liveuser 256
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
257
	#$result["error"],錯誤訊息陣列.
258
	#$result["function"],當前執行的函數名稱.
259
	#$result["content"],平均數.
57 liveuser 260
	#必填參數:
1 liveuser 261
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列
57 liveuser 262
	#可省略參數:
263
	#無.
201 liveuser 264
	#參考資料:
265
	#無.
57 liveuser 266
	#備註:
267
	#無.
1 liveuser 268
	*/
269
	public static function computeMean(&$conf){
270
 
271
		#初始化要回傳的內容
272
		$result=array();
273
 
274
		#記錄當前執行的函數名稱
275
		$result["function"]=__FUNCTION__;
276
 
277
		#如果 $conf 不為陣列
278
		if(gettype($conf)!="array"){
279
 
280
			#設置執行失敗
281
			$result["status"]="false";
282
 
283
			#設置執行錯誤訊息
284
			$result["error"][]="\$conf變數須為陣列形態";
285
 
286
			#如果傳入的參數為 null
287
			if($conf==null){
288
 
289
				#設置執行錯誤訊息
290
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
291
 
292
				}#if end
293
 
294
			#回傳結果
295
			return $result;
296
 
297
			}#if end
298
 
299
		#檢查參數
300
		#函式說明:
301
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
302
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
303
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
304
		#$result["function"],當前執行的函式名稱.
305
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
306
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
307
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
308
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
309
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
310
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
311
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
312
		#必填寫的參數:
313
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
314
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
315
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
316
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
317
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
318
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
319
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
320
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
321
		#可以省略的參數:
322
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
323
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
324
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
325
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
326
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
327
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
328
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
329
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
330
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
331
		#$conf["arrayCountEqualCheck"][]=array();
332
		#參考資料來源:
333
		#array_keys=>http://php.net/manual/en/function.array-keys.php
334
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
335
		unset($conf["variableCheck::checkArguments"]);
336
 
337
		#如果檢查參數失敗
338
		if($checkArguments["status"]=="false"){
339
 
340
			#設置執行失敗
341
			$result["status"]="false";
342
 
343
			#設置執行錯誤訊息
344
			$result["error"]=$checkArguments;
345
 
346
			#回傳結果
347
			return $result;
348
 
349
			}#if end
350
 
351
		#如果檢查不通過
352
		if($checkArguments["passed"]=="false"){
353
 
354
			#設置執行失敗
355
			$result["status"]="false";
356
 
357
			#設置執行錯誤訊息
358
			$result["error"]=$checkArguments;
359
 
360
			#回傳結果
361
			return $result;
362
 
363
			}#if end
364
 
365
		#取得原始資料的筆數
366
		$rawDataCount=count($conf["rawDataArray"]);
367
 
368
		#計算總合
57 liveuser 369
		#函式說明:
1 liveuser 370
		#計算總和.
371
		#回傳結果:
372
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
373
		#$result["error"],錯誤訊息陣列.
374
		#$result["function"],當前執行的函數名稱.
375
		#$result["content"],總和.
57 liveuser 376
		#必填參數:
1 liveuser 377
		$conf["math::computeSum"]["rawDataArray"]=$conf["rawDataArray"];#爲原始資料的一維陣列
378
		#參考資料:
379
		#array-sum=>http://php.net/manual/en/function.array-sum.php
380
		$computeSum=math::computeSum($conf["math::computeSum"]);
381
		unset($conf["math::computeSum"]);
382
 
383
		#如果加總失敗
384
		if($computeSum["status"]=="false"){
385
 
386
			#設置執行失敗
387
			$result["status"]="false";
388
 
389
			#設置執行錯誤訊息
390
			$result["error"]=$computeSum;
391
 
392
			#回傳結果
393
			return $result;
394
 
395
			}#if end
396
 
397
		#取得平均數
398
		$result["content"]=$computeSum["content"]/$rawDataCount;
399
 
400
		#設置執行正常
401
		$result["status"]="true";
402
 
403
		#回傳結果
404
		return $result;
405
 
406
		}#function computeMean end
407
 
408
	/*
57 liveuser 409
	#函式說明:
1 liveuser 410
	#計算標準差,結果會回傳標準差.
411
	#回傳結果:
412
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
413
	#$result["error"],錯誤訊息陣列.
414
	#$result["function"],當前執行的函數名稱.
415
	#$result["content"],標準差.
57 liveuser 416
	#必填參數:
417
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列.
418
	#可省略參數:
419
	#無.
201 liveuser 420
	#參考資料:
421
	#無.
57 liveuser 422
	#備註:
423
	#無.
1 liveuser 424
	*/
425
	public static function computeStandardDeviation(&$conf){
426
 
427
		#初始化要回傳的內容
428
		$result=array();
429
 
430
		#記錄當前執行的函數名稱
431
		$result["function"]=__FUNCTION__;
432
 
433
		#如果 $conf 不為陣列
434
		if(gettype($conf)!="array"){
435
 
436
			#設置執行失敗
437
			$result["status"]="false";
438
 
439
			#設置執行錯誤訊息
440
			$result["error"][]="\$conf變數須為陣列形態";
441
 
442
			#如果傳入的參數為 null
443
			if($conf==null){
444
 
445
				#設置執行錯誤訊息
446
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
447
 
448
				}#if end
449
 
450
			#回傳結果
451
			return $result;
452
 
453
			}#if end
454
 
455
		#檢查參數
456
		#函式說明:
457
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
458
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
459
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
460
		#$result["function"],當前執行的函式名稱.
461
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
462
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
463
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
464
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
465
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
466
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
467
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
468
		#必填寫的參數:
469
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
470
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
471
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
472
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
473
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
474
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
475
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
476
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
477
		#可以省略的參數:
478
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
479
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
480
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
481
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
482
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
483
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
484
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
485
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
486
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
487
		#$conf["arrayCountEqualCheck"][]=array();
488
		#參考資料來源:
489
		#array_keys=>http://php.net/manual/en/function.array-keys.php
490
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
491
		unset($conf["variableCheck::checkArguments"]);
492
 
493
		#如果檢查參數失敗
494
		if($checkArguments["status"]=="false"){
495
 
496
			#設置執行失敗
497
			$result["status"]="false";
498
 
499
			#設置執行錯誤訊息
500
			$result["error"]=$checkArguments;
501
 
502
			#回傳結果
503
			return $result;
504
 
505
			}#if end
506
 
507
		#如果檢查不通過
508
		if($checkArguments["passed"]=="false"){
509
 
510
			#設置執行失敗
511
			$result["status"]="false";
512
 
513
			#設置執行錯誤訊息
514
			$result["error"]=$checkArguments;
515
 
516
			#回傳結果
517
			return $result;
518
 
519
			}#if end
520
 
521
		#取得原始資料的筆數
522
		$rawDataCounts=count($conf["rawDataArray"]);
523
 
524
		#取得平均數
57 liveuser 525
		#函式說明:
1 liveuser 526
		#計算平均數,結果會回傳一數值。
57 liveuser 527
		#必填參數:
1 liveuser 528
		$conf["math"]["computeMean"]["rawDataArray"]=$conf["rawDataArray"];#爲原始資料的一維陣列
529
		$mean=math::computeMean($conf["math"]["computeMean"]);
530
		unset($conf["math"]["computeMean"]);
531
 
532
		#如果取得平均數失敗
533
		if($mean["status"]=="false"){
534
 
535
			#設置執行失敗
536
			$result["status"]="false";
537
 
538
			#設置執行錯誤訊息
539
			$result["error"]=$mean;
540
 
541
			#回傳結果
542
			return $result;
543
 
544
			}#if end
545
 
546
		#取得平均數
547
		$mean=$mean["content"];
548
 
549
		#給與總和的預設值
550
		$sum=0;
551
 
552
		#計算每筆資料減掉平均值的平方和
553
		#pow(a,b)爲計算a的b次方
554
		for($i=0;$i<$rawDataCounts;$i++){
555
 
556
			$sum=$sum+pow(($conf["rawDataArray"][$i]-$mean),2);
557
 
558
			}#for end
559
 
560
		#取得每筆資料減掉平均值的平方然後除以資料筆數
561
		#即爲標準差的平方和
562
		$standardDeviationSqure=$sum/$rawDataCounts;
563
 
564
		#取得標準差
565
		#sqrt()爲開根號
566
		$result["content"]=sqrt($standardDeviationSqure);
567
 
568
		#設置執行正常
569
		$result["status"]="true";
570
 
571
		#回傳結果
572
		return $result;
573
 
574
		}#function computeStandardDeviation end
575
 
576
	/*
57 liveuser 577
	#函式說明:
1 liveuser 578
	#排列一組數字
57 liveuser 579
	#回傳結果:
1 liveuser 580
	#經過排序後依照遞增或遞減順序排列的數字陣列
581
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
582
	#$result["error"],錯誤訊息陣列.
583
	#$result["function"],當前執行的函數名稱.
584
	#$result["key"][$i],過排序後依照遞增或遞減順序排列的數字陣列的第$i-1個元素的key
585
	#$result["value"][$i],過排序後依照遞增或遞減順序排列的數字陣列的第$i-1個元素的value
586
	#$resutt["content"],過排序後依照遞增或遞減順序排列的數字陣列.
57 liveuser 587
	#必填參數:
1 liveuser 588
	$conf["rawDataArray"]=array();#要排序的數字陣列
57 liveuser 589
	#可省略參數:
1 liveuser 590
	#$conf["asc"]="true";#如果爲"true"則排序順變爲從小到大,若為"false"則為從大到小,預設為"false".
201 liveuser 591
	#參考資料:
592
	#無.
57 liveuser 593
	#備註:
594
	#無.
1 liveuser 595
	*/
596
	public static function arrangeNum(&$conf){
597
 
598
		#初始化要回傳的內容
599
		$result=array();
600
 
601
		#記錄當前執行的函數名稱
602
		$result["function"]=__FUNCTION__;
603
 
604
		#如果 $conf 不為陣列
605
		if(gettype($conf)!="array"){
606
 
607
			#設置執行失敗
608
			$result["status"]="false";
609
 
610
			#設置執行錯誤訊息
611
			$result["error"][]="\$conf變數須為陣列形態";
612
 
613
			#如果傳入的參數為 null
614
			if($conf==null){
615
 
616
				#設置執行錯誤訊息
617
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
618
 
619
				}#if end
620
 
621
			#回傳結果
622
			return $result;
623
 
624
			}#if end
625
 
626
		#檢查參數
627
		#函式說明:
628
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
629
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
630
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
631
		#$result["function"],當前執行的函式名稱.
632
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
633
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
634
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
635
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
636
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
637
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
638
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
639
		#必填寫的參數:
640
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
641
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
642
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
643
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
644
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
645
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
646
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
647
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
648
		#可以省略的參數:
649
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
650
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
651
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
652
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
653
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
654
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
655
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
656
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
657
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
658
		#$conf["arrayCountEqualCheck"][]=array();
659
		#參考資料來源:
660
		#array_keys=>http://php.net/manual/en/function.array-keys.php
661
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
662
		unset($conf["variableCheck::checkArguments"]);
663
 
664
		#如果檢查參數失敗
665
		if($checkArguments["status"]=="false"){
666
 
667
			#設置執行失敗
668
			$result["status"]="false";
669
 
670
			#設置執行錯誤訊息
671
			$result["error"]=$checkArguments;
672
 
673
			#回傳結果
674
			return $result;
675
 
676
			}#if end
677
 
678
		#如果檢查不通過
679
		if($checkArguments["passed"]=="false"){
680
 
681
			#設置執行失敗
682
			$result["status"]="false";
683
 
684
			#設置執行錯誤訊息
685
			$result["error"]=$checkArguments;
686
 
687
			#回傳結果
688
			return $result;
689
 
690
			}#if end
691
 
692
		#用來儲存排列後順序的陣列
693
		$result["content"]=array();
694
 
695
		#用來計算的暫存陣列
696
		$inputTempArray=$conf["rawDataArray"];
697
 
698
		#初始化計數
699
		$count=0;
700
 
701
		#當 $inputTempArray 有元素就執行
702
		while(count($inputTempArray)>0){
703
 
57 liveuser 704
			#函式說明:
1 liveuser 705
			#找最大值,結果會回傳最大值.
57 liveuser 706
			#回傳結果:
1 liveuser 707
			#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
708
			#$result["error"],錯誤訊息陣列.
709
			#$result["function"],當前執行的函數名稱.
710
			#$result["key"],最大值原先的key.
711
			#$result["value"],最大值的數字.
57 liveuser 712
			#必填參數:
1 liveuser 713
			$conf["math::getMaxValue"]["rawDataArray"]=$inputTempArray;#爲原始數據
714
			$getMaxValue=math::getMaxValue($conf["math::getMaxValue"]);
715
			unset($conf["math::getMaxValue"]);
716
 
717
			#如果尋找最大值失敗
718
			if($getMaxValue["status"]=="false"){
719
 
720
				#設置執行失敗
721
				$result["status"]="false";
722
 
723
				#設置執行錯誤訊息
724
				$result["error"]=$getMaxValue;
725
 
726
				#回傳結果
727
				return $result;
728
 
729
				}#if end
730
 
57 liveuser 731
			#函式說明:
1 liveuser 732
			#將陣列中特定元素剔除,並重新按照順序排序
57 liveuser 733
			#回傳結果:
1 liveuser 734
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
735
			#$result["error"],錯誤訊息
736
			#$result["function"],當前執行的函數
737
			#$result["content"]["byName"],剔除掉特定元素的陣列,使用原來陣列的key來儲存.
738
			#$result["content"]["byNumber"],剔除掉特定元素的陣列,使用從0開始的整數key來儲存.
57 liveuser 739
			#必填參數:
1 liveuser 740
			$conf["arrays::eraseElement"]["rawInputArray"]=$inputTempArray;#要處理的原始數字陣列
741
			$conf["arrays::eraseElement"]["eraseElementKey"]=(string)$getMaxValue["key"];#要移除的元素key值  
742
			$eraseElement=arrays::eraseElement($conf["arrays::eraseElement"]);
743
			unset($conf["arrays::eraseElement"]);
744
 
745
			#如果移除最大值元素失敗
746
			if($eraseElement["status"]=="false"){
747
 
748
				#設置執行失敗
749
				$result["status"]="false";
750
 
751
				#設置執行錯誤訊息
752
				$result["error"]=$eraseElement;
753
 
754
				#回傳結果
755
				return $result;
756
 
757
				}#if end
758
 
759
			#如果移除元素過後不為空陣列	
760
			if($eraseElement["empty"]=="false"){
761
 
762
				#置換成移除掉最大數元素後的陣列
763
				$inputTempArray=$eraseElement["content"]["byName"];
764
 
765
				}#if end	
766
 
767
			#反之
768
			else{
769
 
770
				#設成空陣列
771
				$inputTempArray=array();
772
 
773
				}#else end
774
 
775
			#依據順位儲存最大的數字元素
776
			$result["value"][$count]=$getMaxValue["value"];
777
			$result["key"][$count]=$getMaxValue["key"];
778
			$result["content"][$count]=$getMaxValue["value"];
779
 
780
			#計數加一
781
			$count++;
782
 
783
			}#while end
784
 
785
		#如果$conf["asc"]爲"true"
786
		if($conf["asc"]=="true"){
787
 
788
			#函式說明:
789
			#將陣列倒置
57 liveuser 790
			#回傳結果:
1 liveuser 791
			#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗.
792
			#$result["error"],錯誤訊息陣列.
793
			#$result["function"],當前執行的函數名稱.
794
			#$result["convertArray"],轉置後的陣列內容.
57 liveuser 795
			#必填參數:
1 liveuser 796
			$conf["arrays::convertArray"]["inputArray"]=$result["value"];#要倒置的陣列.
797
			#參考資料來源:
798
			#http://tw2.php.net/array_reverse => 陣列倒置的內建涵式.
799
			$convertArray=arrays::convertArray($conf["arrays::convertArray"]);
800
			unset($conf["arrays::convertArray"]);
801
 
802
			#如果轉置陣列失敗
803
			if($convertArray["status"]=="false"){
804
 
805
				#設置執行失敗
806
				$result["status"]="false";
807
 
808
				#設置執行錯誤訊息
809
				$result["error"]=$convertArray;
810
 
811
				#回傳結果
812
				return $result;
813
 
814
				}#if end
815
 
816
			#取得轉置後的 $result["value"] 陣列
817
			$result["value"]=$convertArray["convertArray"];
818
 
819
			#函式說明:
820
			#將陣列倒置
57 liveuser 821
			#回傳結果:
1 liveuser 822
			#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗.
823
			#$result["error"],錯誤訊息陣列.
824
			#$result["function"],當前執行的函數名稱.
825
			#$result["convertArray"],轉置後的陣列內容.
57 liveuser 826
			#必填參數:
1 liveuser 827
			$conf["arrays::convertArray"]["inputArray"]=$result["key"];#要倒置的陣列.
828
			#參考資料來源:
829
			#http://tw2.php.net/array_reverse => 陣列倒置的內建涵式.
830
			$convertArray=arrays::convertArray($conf["arrays::convertArray"]);
831
			unset($conf["arrays::convertArray"]);
832
 
833
			#如果轉置陣列失敗
834
			if($convertArray["status"]=="false"){
835
 
836
				#設置執行失敗
837
				$result["status"]="false";
838
 
839
				#設置執行錯誤訊息
840
				$result["error"]=$convertArray;
841
 
842
				#回傳結果
843
				return $result;
844
 
845
				}#if end
846
 
847
			#取得轉置後的 $result["key"] 陣列
848
			$result["key"]=$convertArray["convertArray"];
849
 
850
			#函式說明:
851
			#將陣列倒置
57 liveuser 852
			#回傳結果:
1 liveuser 853
			#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗.
854
			#$result["error"],錯誤訊息陣列.
855
			#$result["function"],當前執行的函數名稱.
856
			#$result["convertArray"],轉置後的陣列內容.
57 liveuser 857
			#必填參數:
1 liveuser 858
			$conf["arrays::convertArray"]["inputArray"]=$result["content"];#要倒置的陣列.
859
			#參考資料來源:
860
			#http://tw2.php.net/array_reverse => 陣列倒置的內建涵式.
861
			$convertArray=arrays::convertArray($conf["arrays::convertArray"]);
862
			unset($conf["arrays::convertArray"]);
863
 
864
			#如果轉置陣列失敗
865
			if($convertArray["status"]=="false"){
866
 
867
				#設置執行失敗
868
				$result["status"]="false";
869
 
870
				#設置執行錯誤訊息
871
				$result["error"]=$convertArray;
872
 
873
				#回傳結果
874
				return $result;
875
 
876
				}#if end
877
 
878
			#取得轉置後的 $result["content"] 陣列
879
			$result["content"]=$convertArray["convertArray"];
880
 
881
			}#if end
882
 
883
		#設置執行正常
884
		$result["status"]="true";	
885
 
886
		#回傳結果
887
		return $result;
888
 
889
		}#function arrangeNum end
890
 
891
	/*
57 liveuser 892
	#函式說明:
1 liveuser 893
	#將數值透過 z-score normalization(zero-mean normalization) 進行正規化,結果會回傳一個陣列 。
57 liveuser 894
	#回傳結果:
1 liveuser 895
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
896
	#$result["function"],當前執行的函數名稱.
897
	#$result["error"],錯誤訊息陣列.
898
	#$result["newValue"][$i]爲第$i+1個數字經過正規化後的結果.
899
	#$result["oldValue"][$i]爲第$i+1個數字的原始內容.
57 liveuser 900
	#必填參數:
1 liveuser 901
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列。
57 liveuser 902
	#可省略參數:
903
	#無.
201 liveuser 904
	#參考資料:
905
	#無.
57 liveuser 906
	#備註:
907
	#無.
1 liveuser 908
	*/
909
	public static function zScoreNormalization($conf){
910
 
911
		#初始化要回傳的內容
912
		$result=array();
913
 
914
		#記錄當前執行的函數名稱
915
		$result["function"]=__FUNCTION__;
916
 
917
		#如果 $conf 不為陣列
918
		if(gettype($conf)!="array"){
919
 
920
			#設置執行失敗
921
			$result["status"]="false";
922
 
923
			#設置執行錯誤訊息
924
			$result["error"][]="\$conf變數須為陣列形態";
925
 
926
			#如果傳入的參數為 null
927
			if($conf==null){
928
 
929
				#設置執行錯誤訊息
930
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
931
 
932
				}#if end
933
 
934
			#回傳結果
935
			return $result;
936
 
937
			}#if end
938
 
939
		#檢查參數
940
		#函式說明:
941
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
942
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
943
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
944
		#$result["function"],當前執行的函式名稱.
945
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
946
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
947
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
948
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
949
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
950
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
951
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
952
		#必填寫的參數:
953
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
954
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
955
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
956
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
957
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
958
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
959
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
960
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
961
		#可以省略的參數:
962
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
963
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
964
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
965
		#$conf["skipableVariableName"]=array();
966
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
967
		#$conf["skipableVariableType"]=array();
968
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
969
		#$conf["skipableVarDefaultValue"]=array("");
970
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
971
		#$conf["arrayCountEqualCheck"][]=array();
972
		#參考資料來源:
973
		#array_keys=>http://php.net/manual/en/function.array-keys.php
974
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
975
		unset($conf["variableCheck::checkArguments"]);
976
 
977
		#如果檢查參數失敗
978
		if($checkArguments["status"]=="false"){
979
 
980
			#設置執行失敗
981
			$result["status"]="false";
982
 
983
			#設置執行錯誤訊息
984
			$result["error"]=$checkArguments;
985
 
986
			#回傳結果
987
			return $result;
988
 
989
			}#if end
990
 
991
		#如果檢查不通過
992
		if($checkArguments["passed"]=="false"){
993
 
994
			#設置執行失敗
995
			$result["status"]="false";
996
 
997
			#設置執行錯誤訊息
998
			$result["error"]=$checkArguments;
999
 
1000
			#回傳結果
1001
			return $result;
1002
 
1003
			}#if end
1004
 
1005
		#取得平均數
1006
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1007
		#$result["error"],錯誤訊息陣列.
1008
		#$result["function"],當前執行的函數名稱.
1009
		#$result["content"],平均數.
1010
		$conf["math"]["computeMean"]["rawDataArray"]=$conf["rawDataArray"];
1011
		$mean=math::computeMean($conf["math"]["computeMean"]);
1012
		unset($conf["math"]["computeMean"]);
1013
 
1014
		#如果取得平均數失敗
1015
		if($mean["status"]=="false"){
1016
 
1017
			#設置執行失敗
1018
			$result["status"]="false";
1019
 
1020
			#設置執行錯誤訊息
1021
			$result["error"]=$mean;
1022
 
1023
			#回傳結果
1024
			return $result;
1025
 
1026
			}#if end
1027
 
1028
		#取得平均數
1029
		$mean=$mean["content"];
1030
 
1031
		#取得標準差
1032
		#回傳結果:
1033
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1034
		#$result["error"],錯誤訊息陣列.
1035
		#$result["function"],當前執行的函數名稱.
1036
		#$result["content"],標準差.
1037
		$conf["math"]["computeStandardDeviation"]["rawDataArray"]=$conf["rawDataArray"];
1038
		$standardDeviaction=math::computeStandardDeviation($conf["math"]["computeStandardDeviation"]);
1039
		unset($conf["math"]["computeStandardDeviation"]);
1040
 
1041
		#如果 取得標準差 失敗
1042
		if($standardDeviaction["status"]=="false"){
1043
 
1044
			#設置執行失敗
1045
			$result["status"]="false";
1046
 
1047
			#設置執行錯誤訊息
1048
			$result["error"]=$standardDeviaction;
1049
 
1050
			#回傳結果
1051
			return $result;
1052
 
1053
			}#if end
1054
 
1055
		#取得標準差
1056
		$standardDeviaction=$standardDeviaction["content"];
1057
 
1058
		#取得資料筆數
1059
		$rawDataCount=count($conf["rawDataArray"]);
1060
 
1061
		#有幾筆原始資料就執行幾次
1062
		for($i=0;$i<$rawDataCount;$i++){
1063
 
1064
			#計算每筆資料經過標準化後的數值,(原始數據減掉平均值)/標準差
1065
			$meanAbsoluteDeviation[$i]=($conf["rawDataArray"][$i]-$mean)/$standardDeviaction;
1066
 
1067
			}#迴圈結束
1068
 
1069
		#將每筆資料經過標準化後的數值放進 $result["newValue"] 陣列變數裏面
1070
		$result["newValue"]=$meanAbsoluteDeviation;
1071
 
1072
		#將原始資料放進陣列變數 $result["oldValue"] 裏面
1073
		$result["oldValue"]=$conf["rawDataArray"];
1074
 
1075
		#設置執行正常
1076
		$result["status"]="true";
1077
 
1078
		#回傳結果
1079
		return $result;
1080
 
1081
		}#函式結束
1082
 
1083
	/*
57 liveuser 1084
	#函式說明:
1 liveuser 1085
	#求算相關係數(皮爾森係數),結果會回傳1數值。代表兩筆數據的相關層度,正值代表正相關;負值代表負相關。
1086
	#回傳結果:
1087
	#$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
1088
	#$result["error"],錯誤訊息陣列.
1089
	#$result["function"],當前執行的函數名稱.
1090
	#$result["content"],相關係數(皮爾森係數).
57 liveuser 1091
	#必填參數:
1 liveuser 1092
	$conf["rawDataArrayA"]=array("");#爲第1組數據,元素數量須與$rawDataArray["B"]一樣.
1093
	$conf["rawDataArrayB"]=array("");#爲第2組數據,元素數量須與$rawDataArray["A"]一樣.
57 liveuser 1094
	#可省略參數:
1095
	#無.
201 liveuser 1096
	#參考資料:
1097
	#無.
57 liveuser 1098
	#備註:
1099
	#無.
1 liveuser 1100
	*/
1101
	public static function computeCorrelationCoefficientForNumbericData(&$conf){
1102
 
1103
		#取得將參數丟給R執行後的回傳結果
1104
		return R::computeCorrelationCoefficientForNumbericData($conf);
1105
 
1106
		}#function computeCorrelationCoefficientForNumbericData end
1107
 
1108
	/*
57 liveuser 1109
	#函式說明:
1 liveuser 1110
	#計算兩組數字數據的共變異數,結果會回傳一個數值
1111
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1112
	#$result["error"],錯誤訊息陣列.
1113
	#$result["function"],當前執行的函數名稱.
1114
	#$result["content"],兩組數字數據的共變異數.
57 liveuser 1115
	#必填參數:
1 liveuser 1116
	$conf["rawDataArrayA"]="";#爲第1組數據
1117
	$conf["rawDataArrayB"]="";#爲第2組數據
57 liveuser 1118
	#可省略參數:
1119
	#無.
201 liveuser 1120
	#參考資料:
1121
	#無.
57 liveuser 1122
	#備註:
1123
	#無.
1 liveuser 1124
	*/
1125
	public static function computeCovarianceOfNumericData(&$conf){
1126
 
1127
		#初始化要回傳的內容
1128
		$result=array();
1129
 
1130
		#記錄當前執行的函數名稱
1131
		$result["function"]=__FUNCTION__;
1132
 
1133
		#如果 $conf 不為陣列
1134
		if(gettype($conf)!="array"){
1135
 
1136
			#設置執行失敗
1137
			$result["status"]="false";
1138
 
1139
			#設置執行錯誤訊息
1140
			$result["error"][]="\$conf變數須為陣列形態";
1141
 
1142
			#如果傳入的參數為 null
1143
			if($conf==null){
1144
 
1145
				#設置執行錯誤訊息
1146
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1147
 
1148
				}#if end
1149
 
1150
			#回傳結果
1151
			return $result;
1152
 
1153
			}#if end
1154
 
1155
		#檢查參數
1156
		#函式說明:
1157
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1158
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1159
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1160
		#$result["function"],當前執行的函式名稱.
1161
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1162
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1163
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1164
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1165
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1166
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1167
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1168
		#必填寫的參數:
1169
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1170
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1171
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1172
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArrayA","rawDataArrayB");
1173
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
1174
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
1175
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1176
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1177
		#可以省略的參數:
1178
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1179
		#$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1180
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1181
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
1182
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1183
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1184
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1185
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
1186
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1187
		#$conf["arrayCountEqualCheck"][]=array();
1188
		#參考資料來源:
1189
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1190
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1191
		unset($conf["variableCheck::checkArguments"]);
1192
 
1193
		#如果檢查參數失敗
1194
		if($checkArguments["status"]=="false"){
1195
 
1196
			#設置執行失敗
1197
			$result["status"]="false";
1198
 
1199
			#設置執行錯誤訊息
1200
			$result["error"]=$checkArguments;
1201
 
1202
			#回傳結果
1203
			return $result;
1204
 
1205
			}#if end
1206
 
1207
		#如果檢查不通過
1208
		if($checkArguments["passed"]=="false"){
1209
 
1210
			#設置執行失敗
1211
			$result["status"]="false";
1212
 
1213
			#設置執行錯誤訊息
1214
			$result["error"]=$checkArguments;
1215
 
1216
			#回傳結果
1217
			return $result;
1218
 
1219
			}#if end
1220
 
1221
		#A的期望值等於A的平均數
57 liveuser 1222
		#函式說明:
1 liveuser 1223
		#計算平均數
1224
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1225
		#$result["error"],錯誤訊息陣列.
1226
		#$result["function"],當前執行的函數名稱.
1227
		#$result["content"],平均數.
57 liveuser 1228
		#必填參數:
1 liveuser 1229
		$conf["math::computeMean"]["rawDataArray"]=$conf["rawDataArrayA"];#爲原始資料的一維陣列
1230
		$meanA=math::computeMean($conf["math::computeMean"]);
1231
		unset($conf["math::computeMean"]);
1232
 
1233
		#如果取得平均數A失敗
1234
		if($meanA["status"]=="false"){
1235
 
1236
			#設置執行失敗
1237
			$result["status"]="false";
1238
 
1239
			#設置執行錯誤訊息
1240
			$result["error"]=$meanA;
1241
 
1242
			#回傳結果
1243
			return $result;
1244
 
1245
			}#if end
1246
 
1247
		#取得平均數A
1248
		$meanA=$meanA["content"];
1249
 
1250
		#A的期望值等於A的平均數
57 liveuser 1251
		#函式說明:
1 liveuser 1252
		#計算平均數
1253
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1254
		#$result["error"],錯誤訊息陣列.
1255
		#$result["function"],當前執行的函數名稱.
1256
		#$result["content"],平均數.
57 liveuser 1257
		#必填參數:
1 liveuser 1258
		$conf["math::computeMean"]["rawDataArray"]=$conf["rawDataArrayB"];#爲原始資料的一維陣列
1259
		$meanB=math::computeMean($conf["math::computeMean"]);
1260
		unset($conf["math::computeMean"]);
1261
 
1262
		#如果取得平均數B失敗
1263
		if($meanA["status"]=="false"){
1264
 
1265
			#設置執行失敗
1266
			$result["status"]="false";
1267
 
1268
			#設置執行錯誤訊息
1269
			$result["error"]=$meanB;
1270
 
1271
			#回傳結果
1272
			return $result;
1273
 
1274
			}#if end
1275
 
1276
		#取得平均數B
1277
		$meanB=$meanB["content"];
1278
 
1279
		#取得資料筆數
1280
		$dataCounts=count($conf["rawDataArrayA"]);
1281
 
1282
		#預設總合爲0
1283
		$sum=0;
1284
 
1285
		#求算A、B的變異數
1286
		for($i=0;$i<$dataCounts;$i++){
1287
 
1288
			#將每筆數據的(A的單筆數值-A類的平均)乘上(B的單筆數值-B類的平均)
1289
			$sum=$sum+($conf["rawDataArrayA"][$i]-$meanA)*($conf["rawDataArrayB"][$i]-$meanB);
1290
 
1291
			}#迴圈結束
1292
 
1293
		#儲存結果
1294
		$result["content"]=$sum/$dataCounts;
1295
 
1296
		#設置執行正常
1297
		$result["status"]="true";
1298
 
1299
		#回傳結果
1300
		return $result;
1301
 
1302
		}#function computeCovarianceOfNumericData end
1303
 
1304
	/*
57 liveuser 1305
	#函式說明:
1 liveuser 1306
	#計算一組數據的中間數值
57 liveuser 1307
	#回傳結果:
1 liveuser 1308
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1309
	#$result["error"],錯誤訊息陣列.
1310
	#$result["function"],當前執行的函數名稱.
1311
	#$result["content"],最一組數據的中間數值.
57 liveuser 1312
	#必填參數:
1 liveuser 1313
	$conf["rawDataArray"]=array("");#要進行計算的數據陣列
57 liveuser 1314
	#可省略參數:
1315
	#無.
201 liveuser 1316
	#參考資料:
1317
	#無.
57 liveuser 1318
	#備註:
1319
	#無.
1 liveuser 1320
	*/
1321
	public static function getMedianNum(&$conf){
1322
 
1323
		#初始化要回傳的內容
1324
		$result=array();
1325
 
1326
		#記錄當前執行的函數名稱
1327
		$result["function"]=__FUNCTION__;
1328
 
1329
		#如果 $conf 不為陣列
1330
		if(gettype($conf)!="array"){
1331
 
1332
			#設置執行失敗
1333
			$result["status"]="false";
1334
 
1335
			#設置執行錯誤訊息
1336
			$result["error"][]="\$conf變數須為陣列形態";
1337
 
1338
			#如果傳入的參數為 null
1339
			if($conf==null){
1340
 
1341
				#設置執行錯誤訊息
1342
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1343
 
1344
				}#if end
1345
 
1346
			#回傳結果
1347
			return $result;
1348
 
1349
			}#if end
1350
 
1351
		#檢查參數
1352
		#函式說明:
1353
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1354
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1355
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1356
		#$result["function"],當前執行的函式名稱.
1357
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1358
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1359
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1360
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1361
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1362
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1363
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1364
		#必填寫的參數:
1365
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1366
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1367
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1368
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
1369
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
1370
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
1371
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1372
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1373
		#可以省略的參數:
1374
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1375
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1376
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1377
		#$conf["skipableVariableName"]=array();
1378
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1379
		#$conf["skipableVariableType"]=array();
1380
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1381
		#$conf["skipableVarDefaultValue"]=array("");
1382
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1383
		#$conf["arrayCountEqualCheck"][]=array();
1384
		#參考資料來源:
1385
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1386
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1387
		unset($conf["variableCheck::checkArguments"]);
1388
 
1389
		#如果檢查參數失敗
1390
		if($checkArguments["status"]=="false"){
1391
 
1392
			#設置執行失敗
1393
			$result["status"]="false";
1394
 
1395
			#設置執行錯誤訊息
1396
			$result["error"]=$checkArguments;
1397
 
1398
			#回傳結果
1399
			return $result;
1400
 
1401
			}#if end
1402
 
1403
		#如果檢查不通過
1404
		if($checkArguments["passed"]=="false"){
1405
 
1406
			#設置執行失敗
1407
			$result["status"]="false";
1408
 
1409
			#設置執行錯誤訊息
1410
			$result["error"]=$checkArguments;
1411
 
1412
			#回傳結果
1413
			return $result;
1414
 
1415
			}#if end
1416
 
1417
		#初始化要回傳的中間數
1418
		$result["content"]="";
1419
 
1420
		#取得有幾筆數據
1421
		$dataCount=count($conf["rawDataArray"]);
1422
 
1423
		#如果數據數量爲偶數
1424
		if($dataCount%2==0){
1425
 
1426
			# (n/2+(n/2)/2) 爲中間數,n爲資料筆數
1427
			$medianNum=($conf["rawDataArray"][($dataCount/2)-1]+$conf["rawDataArray"][($dataCount/2)])/2;
1428
 
1429
			}#if end
1430
 
1431
		#反之則爲奇數資料
1432
		else{
1433
 
1434
			#計算中間數字爲第幾個數字
1435
			(int)$medianNumAdd=($dataCount/2)+1;
1436
 
1437
			#取得中間數
1438
			$medianNum=$conf["rawDataArray"][$medianNumAdd];
1439
 
1440
			}#else end
1441
 
1442
		#取得中位數
1443
		$result["content"]=$medianNum;
1444
 
1445
		#設置執行正常
1446
		$result["status"]="true";
1447
 
1448
		#回傳中間數值
1449
		return $result;
1450
 
1451
		}#function getMedianNum end
1452
 
1453
	/*
57 liveuser 1454
	#函式說明:
1 liveuser 1455
	#取得Q1、Q2、Q3(四分位數)
57 liveuser 1456
	#回傳結果:
1 liveuser 1457
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1458
	#$result["error"],錯誤訊息陣列.
1459
	#$result["function"],當前執行的函數名稱.
1460
	#$result["Q1"],Q1值
1461
	#$result["Q2"],Q2值
1462
	#$result["Q3"],Q3值
57 liveuser 1463
	#必填參數:
1 liveuser 1464
	$conf["rawDataArray"]=array();#要求算四分位的數據
57 liveuser 1465
	#可省略參數:
1466
	#無.
1 liveuser 1467
	#參考資料:
1468
	#https://zh.wikipedia.org/zh-tw/%E5%9B%9B%E5%88%86%E4%BD%8D%E6%95%B0
57 liveuser 1469
	#備註:
1470
	#無.
1 liveuser 1471
	*/
1472
	public static function getQuartile(&$conf){
1473
 
1474
		#初始化要回傳的內容
1475
		$result=array();
1476
 
1477
		#記錄當前執行的函數名稱
1478
		$result["function"]=__FUNCTION__;
1479
 
1480
		#如果 $conf 不為陣列
1481
		if(gettype($conf)!="array"){
1482
 
1483
			#設置執行失敗
1484
			$result["status"]="false";
1485
 
1486
			#設置執行錯誤訊息
1487
			$result["error"][]="\$conf變數須為陣列形態";
1488
 
1489
			#如果傳入的參數為 null
1490
			if($conf==null){
1491
 
1492
				#設置執行錯誤訊息
1493
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1494
 
1495
				}#if end
1496
 
1497
			#回傳結果
1498
			return $result;
1499
 
1500
			}#if end
1501
 
1502
		#檢查參數
1503
		#函式說明:
1504
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1505
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1506
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1507
		#$result["function"],當前執行的函式名稱.
1508
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1509
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1510
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1511
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1512
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1513
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1514
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1515
		#必填寫的參數:
1516
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1517
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1518
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1519
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
1520
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
1521
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
1522
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1523
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1524
		#可以省略的參數:
1525
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1526
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1527
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1528
		#$conf["skipableVariableName"]=array();
1529
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1530
		#$conf["skipableVariableType"]=array();
1531
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1532
		#$conf["skipableVarDefaultValue"]=array("");
1533
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1534
		#$conf["arrayCountEqualCheck"][]=array();
1535
		#參考資料來源:
1536
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1537
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1538
		unset($conf["variableCheck::checkArguments"]);
1539
 
1540
		#如果檢查參數失敗
1541
		if($checkArguments["status"]=="false"){
1542
 
1543
			#設置執行失敗
1544
			$result["status"]="false";
1545
 
1546
			#設置執行錯誤訊息
1547
			$result["error"]=$checkArguments;
1548
 
1549
			#回傳結果
1550
			return $result;
1551
 
1552
			}#if end
1553
 
1554
		#如果檢查不通過
1555
		if($checkArguments["passed"]=="false"){
1556
 
1557
			#設置執行失敗
1558
			$result["status"]="false";
1559
 
1560
			#設置執行錯誤訊息
1561
			$result["error"]=$checkArguments;
1562
 
1563
			#回傳結果
1564
			return $result;
1565
 
1566
			}#if end
1567
 
1568
		#排序原始數據使之從小到大
57 liveuser 1569
		#函式說明:
1 liveuser 1570
		#排列一組數字
57 liveuser 1571
		#回傳結果:
1 liveuser 1572
		#經過排序後依照遞增或遞減順序排列的數字陣列
1573
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1574
		#$result["error"],錯誤訊息陣列.
1575
		#$result["function"],當前執行的函數名稱.
1576
		#$result["key"][$i],過排序後依照遞增或遞減順序排列的數字陣列的第$i-1個元素的key
1577
		#$result["value"][$i],過排序後依照遞增或遞減順序排列的數字陣列的第$i-1個元素的value
1578
		#$resutt["content"],過排序後依照遞增或遞減順序排列的數字陣列.
57 liveuser 1579
		#必填參數:
1 liveuser 1580
		$conf["math::arrangeNum"]["rawDataArray"]=$conf["rawDataArray"];#要排序的數字陣列
57 liveuser 1581
		#可省略參數:
1 liveuser 1582
		$conf["math::arrangeNum"]["asc"]="true";#如果爲"true"則排序順變爲從小到大,若為"false"則為從大到小,預設為"false".
1583
		$arrangeNum=math::arrangeNum($conf["math::arrangeNum"]);
1584
		unset($conf["math::arrangeNum"]);
1585
 
1586
		#如果 排序原始數據 失敗
1587
		if($arrangeNum["status"]=="false"){
1588
 
1589
			#設置執行失敗
1590
			$result["status"]="false";
1591
 
1592
			#設置執行錯誤訊息
1593
			$result["error"]=$arrangeNum;
1594
 
1595
			#回傳結果
1596
			return $result;
1597
 
1598
			}#if end
1599
 
1600
		#取得Q2
57 liveuser 1601
		#函式說明:
1 liveuser 1602
		#計算一組數據的中間數值
57 liveuser 1603
		#回傳結果:
1 liveuser 1604
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1605
		#$result["error"],錯誤訊息陣列.
1606
		#$result["function"],當前執行的函數名稱.
1607
		#$result["content"],最一組數據的中間數值.
57 liveuser 1608
		#必填參數:
1 liveuser 1609
		$conf["math"]["getMedianNum"]["rawDataArray"]=$arrangeNum["content"];#要進行計算的數據陣列
1610
		$mediaNum=math::getMedianNum($conf["math"]["getMedianNum"]);
1611
		unset($conf["math"]["getMedianNum"]);
1612
 
1613
		#如果取得Q2失敗
1614
		if($mediaNum["status"]=="false"){
1615
 
1616
			#設置執行失敗
1617
			$result["status"]="false";
1618
 
1619
			#設置執行錯誤訊息
1620
			$result["error"]=$mediaNum;
1621
 
1622
			#回傳結果
1623
			return $result;
1624
 
1625
			}#if end
1626
 
1627
		#取得Q2
1628
		$result["Q2"]=$mediaNum["content"];
1629
 
1630
		#取得原始輸入陣列的元素數目
1631
		$varCount=count($arrangeNum["content"]);
1632
 
1633
		#初始化儲存用於計算Q1的元素陣列
1634
		$q2RawArray=array();
1635
 
1636
		#另存小於等於Q2元素的陣列
1637
		for($i=0;$i<$varCount;$i++){
1638
 
1639
			#取得小於等於Q2的元素
1640
			if($arrangeNum["content"][$i]<=$result["Q2"]){
1641
 
1642
				#取得小於等於Q2的元素
1643
				$q2RawArray[]=$arrangeNum["content"][$i];
1644
 
1645
				}#if end
1646
 
1647
			}#for end
1648
 
1649
		#求得Q1
57 liveuser 1650
		#函式說明:
1 liveuser 1651
		#計算一組數據的中間數值
57 liveuser 1652
		#回傳結果:
1 liveuser 1653
		#一組數據的中間數值
57 liveuser 1654
		#必填參數:
1 liveuser 1655
		$conf["math"]["getMedianNum"]["rawDataArray"]=$q2RawArray;#要進行計算的數據陣列
1656
		$mediaNum=math::getMedianNum($conf["math"]["getMedianNum"]);
1657
		unset($conf["math"]["getMedianNum"]);
1658
 
1659
		#如果取得Q1失敗
1660
		if($mediaNum["status"]=="false"){
1661
 
1662
			#設置執行失敗
1663
			$result["status"]="false";
1664
 
1665
			#設置執行錯誤訊息
1666
			$result["error"]=$mediaNum;
1667
 
1668
			#回傳結果
1669
			return $result;
1670
 
1671
			}#if end
1672
 
1673
		#取得Q1
1674
		$result["Q1"]=$mediaNum["content"];
1675
 
1676
		#初始化儲存用於計算Q3的元素陣列
1677
		$q3RawArray=array();
1678
 
1679
		#另存大於等於Q2元素的陣列
1680
		for($i=0;$i<$varCount;$i++){
1681
 
1682
			#取得小於等於Q2的元素
1683
			if($arrangeNum["content"][$i]>=$result["Q2"]){
1684
 
1685
				#取得小於等於Q2的元素
1686
				$q3RawArray[]=$arrangeNum["content"][$i];
1687
 
1688
				}#if end
1689
 
1690
			}#for end
1691
 
1692
		#求得Q3
57 liveuser 1693
		#函式說明:
1 liveuser 1694
		#計算一組數據的中間數值
57 liveuser 1695
		#回傳結果:
1 liveuser 1696
		#一組數據的中間數值
57 liveuser 1697
		#必填參數:
1 liveuser 1698
		$conf["math"]["getMedianNum"]["rawDataArray"]=$q3RawArray;#要進行計算的數據陣列
1699
		$mediaNum=math::getMedianNum($conf["math"]["getMedianNum"]);
1700
		unset($conf["math"]["getMedianNum"]);
1701
 
1702
		#如果 取得中位數 失敗
1703
		if($mediaNum["status"]=="false"){
1704
 
1705
			#設置執行失敗
1706
			$result["status"]="false";
1707
 
1708
			#設置執行錯誤訊息
1709
			$result["error"]=$mediaNum;
1710
 
1711
			#回傳結果
1712
			return $result;
1713
 
1714
			}#if end	
1715
 
1716
		#取得 Q3 
1717
		$result["Q3"]=$mediaNum["content"];
1718
 
1719
		#設置執行正常
1720
		$result["status"]="true";	
1721
 
1722
		#回傳結果
1723
		return $result;
1724
 
1725
		}#function getQuarter end
1726
 
1727
	/*
57 liveuser 1728
	#函式說明:
1 liveuser 1729
	#判斷在常態分佈的條件下針對單一變量會有那些 outlier(異常值),結果會回傳一個陣列。
57 liveuser 1730
	#回傳結果:
1 liveuser 1731
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1732
	#$result["error"],錯誤訊息陣列.
1733
	#$result["function"],當前執行的函數名稱.
1734
	#$result["content"],陣列,一個含有離羣值的陣列.
1735
	#$result["founded"],字串,"true"代表有離群值,"false"代表沒有離群值出現.
57 liveuser 1736
	#必填參數:
1 liveuser 1737
	$conf["rawDataArray"];#爲原始數據的陣列
57 liveuser 1738
	#可省略參數:
1739
	#無.
1 liveuser 1740
	#參考資料來源:
1741
	#http://zhidao.baidu.com/question/252394894.html	
57 liveuser 1742
	#備註:
1743
	#無.
1 liveuser 1744
	*/
1745
	public static function findOutlier(&$conf){
1746
 
1747
		#初始化要回傳的內容
1748
		$result=array();
1749
 
1750
		#記錄當前執行的函數名稱
1751
		$result["function"]=__FUNCTION__;
1752
 
1753
		#如果 $conf 不為陣列
1754
		if(gettype($conf)!="array"){
1755
 
1756
			#設置執行失敗
1757
			$result["status"]="false";
1758
 
1759
			#設置執行錯誤訊息
1760
			$result["error"][]="\$conf變數須為陣列形態";
1761
 
1762
			#如果傳入的參數為 null
1763
			if($conf==null){
1764
 
1765
				#設置執行錯誤訊息
1766
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1767
 
1768
				}#if end
1769
 
1770
			#回傳結果
1771
			return $result;
1772
 
1773
			}#if end
1774
 
1775
		#檢查參數
1776
		#函式說明:
1777
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1778
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1779
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1780
		#$result["function"],當前執行的函式名稱.
1781
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1782
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1783
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1784
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1785
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1786
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1787
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1788
		#必填寫的參數:
1789
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1790
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1791
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1792
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
1793
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
1794
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
1795
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1796
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1797
		#可以省略的參數:
1798
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1799
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1800
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1801
		#$conf["skipableVariableName"]=array();
1802
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1803
		#$conf["skipableVariableType"]=array();
1804
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1805
		#$conf["skipableVarDefaultValue"]=array("");
1806
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1807
		#$conf["arrayCountEqualCheck"][]=array();
1808
		#參考資料來源:
1809
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1810
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1811
		unset($conf["variableCheck::checkArguments"]);
1812
 
1813
		#如果檢查參數失敗
1814
		if($checkArguments["status"]=="false"){
1815
 
1816
			#設置執行失敗
1817
			$result["status"]="false";
1818
 
1819
			#設置執行錯誤訊息
1820
			$result["error"]=$checkArguments;
1821
 
1822
			#回傳結果
1823
			return $result;
1824
 
1825
			}#if end
1826
 
1827
		#如果檢查不通過
1828
		if($checkArguments["passed"]=="false"){
1829
 
1830
			#設置執行失敗
1831
			$result["status"]="false";
1832
 
1833
			#設置執行錯誤訊息
1834
			$result["error"]=$checkArguments;
1835
 
1836
			#回傳結果
1837
			return $result;
1838
 
1839
			}#if end
1840
 
1841
		#初始化沒有找到離群值
1842
		$result["founded"]="false";
1843
 
57 liveuser 1844
		#函式說明:
1 liveuser 1845
		#排列一組數字
57 liveuser 1846
		#回傳結果:
1 liveuser 1847
		#經過排序後由大到小的數字陣列
1848
		#$result[$i]["key"],爲$i-1個算元素的key
1849
		#$result[$i]["value"], 爲$i-1個算元素的value
57 liveuser 1850
		#必填參數:
1 liveuser 1851
		$conf["math"]["arrangeNum"]["rawDataArray"]=$conf["rawDataArray"];#要排序的數字陣列
57 liveuser 1852
		#可省略參數:
1 liveuser 1853
		#$conf["asc"]="true";#如果爲 true 則排序順變爲從小到大
1854
		$rawDataArray=math::arrangeNum($conf["math"]["arrangeNum"]);
1855
		unset($conf["math"]["arrangeNum"]);
1856
 
1857
		#如果由大排到小失敗
1858
		if($rawDataArray["status"]=="false"){
1859
 
1860
			#設置執行失敗
1861
			$result["status"]="false";
1862
 
1863
			#設置執行錯誤訊息
1864
			$result["error"]=$rawDataArray;
1865
 
1866
			#回傳結果
1867
			return $result;
1868
 
1869
			}#if end
1870
 
1871
		#初始化轉化好的一維陣列
1872
		$oneDimetionArray=$rawDataArray["content"];
1873
 
57 liveuser 1874
		#函式說明:
1 liveuser 1875
		#取得Q1、Q2、Q3(四分位數)
57 liveuser 1876
		#回傳結果:
1 liveuser 1877
		#$result["Q1"],Q1值
1878
		#$result["Q2"],Q2值
1879
		#$result["Q3"],Q3值
57 liveuser 1880
		#必填參數:
1 liveuser 1881
		$conf["math"]["getOutlier"]["rawDataArray"]=$oneDimetionArray;#要求算四分位的數據
1882
		#參考資料:
1883
		#https://zh.wikipedia.org/zh-tw/%E5%9B%9B%E5%88%86%E4%BD%8D%E6%95%B0
1884
		$quartile=math::getQuartile($conf["math"]["getOutlier"]);
1885
		unset($conf["math"]["getOutlier"]);
1886
 
1887
		#如果尋找Q1,Q2,Q3失敗
1888
		if($quartile["status"]=="false"){
1889
 
1890
			#設置執行失敗
1891
			$result["status"]="false";
1892
 
1893
			#設置執行錯誤訊息
1894
			$result["error"]=$quartile;
1895
 
1896
			#回傳結果
1897
			return $result;
1898
 
1899
			}#if end
1900
 
1901
		#求算IQR(四分位距)
1902
		$iqr=$quartile["Q3"]-$quartile["Q1"];
1903
 
1904
		#要檢測的元素有幾個就執行幾次
1905
		for($i=0;$i<count($oneDimetionArray);$i++){
1906
 
1907
			#如果要檢測離羣值的陣列元素數值減掉Q2後大於1.5倍IQR
1908
			if(abs($oneDimetionArray[$i]-$quartile["Q2"])>$iqr*1.5 ){
1909
 
1910
				#取得離羣值
1911
				$outlier[]=$oneDimetionArray[$i];
1912
 
1913
				}#if end
1914
 
1915
			}#for end
1916
 
1917
		#如果有離群值
1918
		if(isset($outlier)){
1919
 
1920
			#設置有找到離群值
1921
			$result["founded"]="true";
1922
 
1923
			#另存離群值
1924
			$result["content"]=$outlier;
1925
 
1926
			}#if end
1927
 
1928
		#設置執行正常
1929
		$result["status"]="true";
1930
 
1931
		#回傳離羣值
1932
		return $result;
1933
 
1934
		}#function findOutlier end
1935
 
1936
	/*
57 liveuser 1937
	#函式說明:
1 liveuser 1938
	#找最大值,結果會回傳最大值.
57 liveuser 1939
	#回傳結果:
1 liveuser 1940
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1941
	#$result["error"],錯誤訊息陣列.
1942
	#$result["function"],當前執行的函數名稱.
1943
	#$result["key"],最大值原先的key.
1944
	#$result["value"],最大值的數字.
57 liveuser 1945
	#必填參數:
201 liveuser 1946
	#$conf["rawDataArray"],陣列,爲原始數據.
1947
	$conf["rawDataArray"]=array();
57 liveuser 1948
	#可省略參數:
1949
	#無.
201 liveuser 1950
	#參考資料:
1951
	#無.
57 liveuser 1952
	#備註:
1953
	#無.
1 liveuser 1954
	*/
1955
	public static function getMaxValue(&$conf){
1956
 
1957
		#初始化要回傳的內容
1958
		$result=array();
1959
 
1960
		#記錄當前執行的函數名稱
1961
		$result["function"]=__FUNCTION__;
1962
 
1963
		#如果 $conf 不為陣列
1964
		if(gettype($conf)!="array"){
1965
 
1966
			#設置執行失敗
1967
			$result["status"]="false";
1968
 
1969
			#設置執行錯誤訊息
1970
			$result["error"][]="\$conf變數須為陣列形態";
1971
 
1972
			#如果傳入的參數為 null
1973
			if($conf==null){
1974
 
1975
				#設置執行錯誤訊息
1976
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1977
 
1978
				}#if end
1979
 
1980
			#回傳結果
1981
			return $result;
1982
 
1983
			}#if end
1984
 
1985
		#檢查參數
1986
		#函式說明:
1987
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1988
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1989
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1990
		#$result["function"],當前執行的函式名稱.
1991
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1992
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1993
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1994
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1995
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1996
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1997
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1998
		#必填寫的參數:
1999
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2000
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2001
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2002
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
2003
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
2004
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
2005
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2006
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2007
		#可以省略的參數:
2008
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2009
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2010
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2011
		#$conf["skipableVariableName"]=array();
2012
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2013
		#$conf["skipableVariableType"]=array();
2014
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2015
		#$conf["skipableVarDefaultValue"]=array("");
2016
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2017
		#$conf["arrayCountEqualCheck"][]=array();
2018
		#參考資料來源:
2019
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2020
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2021
		unset($conf["variableCheck::checkArguments"]);
2022
 
2023
		#如果檢查參數失敗
2024
		if($checkArguments["status"]=="false"){
2025
 
2026
			#設置執行失敗
2027
			$result["status"]="false";
2028
 
2029
			#設置執行錯誤訊息
2030
			$result["error"]=$checkArguments;
2031
 
2032
			#回傳結果
2033
			return $result;
2034
 
2035
			}#if end
2036
 
2037
		#如果檢查不通過
2038
		if($checkArguments["passed"]=="false"){
2039
 
2040
			#設置執行失敗
2041
			$result["status"]="false";
2042
 
2043
			#設置執行錯誤訊息
2044
			$result["error"]=$checkArguments;
2045
 
2046
			#回傳結果
2047
			return $result;
2048
 
2049
			}#if end
2050
 
2051
		#初始化要回傳的陣列
2052
		$outputArray=array();
2053
 
2054
		#初始化技計數的變數
2055
		$count=0;
2056
 
2057
		#取得每個元素的key值
2058
		foreach($conf["rawDataArray"] as $key=>$value){
2059
 
2060
			#另存 key
2061
			$outputArray[$count]["key"]=$key;
2062
 
2063
			#另存 value
2064
			$outputArray[$count]["value"]=$value;
2065
 
2066
			#計數+1
2067
			$count++;
2068
 
2069
			}#foreach end
2070
 
2071
		#假定第一個數字爲最大值
2072
		$max=$outputArray[0];
2073
 
2074
		#找出最大值
2075
		for($i=1;$i<count($outputArray);$i++){
2076
 
2077
			#如果目前認爲的最大值小於後一個數字,
2078
			if($max["value"]<$outputArray[$i]["value"]){
2079
 
2080
				#則將較大的數字放進 $max 裏面,
2081
				$max=$outputArray[$i];
2082
 
2083
				}#判斷式結束
2084
 
2085
			}#迴圈結束	
2086
 
2087
		#取得最大值的原先key名稱
2088
		$result["key"]=$max["key"];	
2089
 
2090
		#取得最大值
2091
		$result["value"]=$max["value"];
2092
 
2093
		#設置執行正常
2094
		$result["status"]="true";
2095
 
2096
		#回傳最大值
2097
		return $result;
2098
 
2099
		}#函式結束
2100
 
2101
	/*
57 liveuser 2102
	#函式說明:
1 liveuser 2103
	#找最小值,結果會回傳最小值
57 liveuser 2104
	#回傳內容:
1 liveuser 2105
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2106
	#$result["error"],錯誤訊息陣列.
2107
	#$result["function"],當前執行的函數名稱.
2108
	#$result["key"],最大值原先的key.
2109
	#$result["value"],陣列裏面最小的數值.
57 liveuser 2110
	#必填參數:
1 liveuser 2111
	$conf["rawDataArray"]=array();#爲原始數據
57 liveuser 2112
	#可省略參數:
2113
	#無.
201 liveuser 2114
	#參考資料:
2115
	#無.
57 liveuser 2116
	#備註:
2117
	#無.
1 liveuser 2118
	*/
2119
	public static function getMinValue(&$conf){
2120
 
2121
		#初始化要回傳的內容
2122
		$result=array();
2123
 
2124
		#記錄當前執行的函數名稱
2125
		$result["function"]=__FUNCTION__;
2126
 
2127
		#如果 $conf 不為陣列
2128
		if(gettype($conf)!="array"){
2129
 
2130
			#設置執行失敗
2131
			$result["status"]="false";
2132
 
2133
			#設置執行錯誤訊息
2134
			$result["error"][]="\$conf變數須為陣列形態";
2135
 
2136
			#如果傳入的參數為 null
2137
			if($conf==null){
2138
 
2139
				#設置執行錯誤訊息
2140
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2141
 
2142
				}#if end
2143
 
2144
			#回傳結果
2145
			return $result;
2146
 
2147
			}#if end
2148
 
2149
		#檢查參數
2150
		#函式說明:
2151
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2152
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2153
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2154
		#$result["function"],當前執行的函式名稱.
2155
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2156
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2157
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2158
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2159
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2160
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2161
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2162
		#必填寫的參數:
2163
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2164
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2165
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2166
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
2167
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
2168
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
2169
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2170
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2171
		#可以省略的參數:
2172
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2173
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2174
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2175
		#$conf["skipableVariableName"]=array();
2176
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2177
		#$conf["skipableVariableType"]=array();
2178
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2179
		#$conf["skipableVarDefaultValue"]=array("");
2180
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2181
		#$conf["arrayCountEqualCheck"][]=array();
2182
		#參考資料來源:
2183
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2184
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2185
		unset($conf["variableCheck::checkArguments"]);
2186
 
2187
		#如果檢查參數失敗
2188
		if($checkArguments["status"]=="false"){
2189
 
2190
			#設置執行失敗
2191
			$result["status"]="false";
2192
 
2193
			#設置執行錯誤訊息
2194
			$result["error"]=$checkArguments;
2195
 
2196
			#回傳結果
2197
			return $result;
2198
 
2199
			}#if end
2200
 
2201
		#如果檢查不通過
2202
		if($checkArguments["passed"]=="false"){
2203
 
2204
			#設置執行失敗
2205
			$result["status"]="false";
2206
 
2207
			#設置執行錯誤訊息
2208
			$result["error"]=$checkArguments;
2209
 
2210
			#回傳結果
2211
			return $result;
2212
 
2213
			}#if end
2214
 
2215
		#初始化技計數的變數
2216
		$count=0;
2217
 
2218
		#取得每個元素的key值
2219
		foreach($conf["rawDataArray"] as $key=>$value){
2220
 
2221
			#另存 key
2222
			$outputArray[$count]["key"]=$key;
2223
 
2224
			#另存 value
2225
			$outputArray[$count]["value"]=$value;
2226
 
2227
			#計數++
2228
			$count++;
2229
 
2230
			}#foreach end
2231
 
2232
		#假定第一個數字爲最小值
2233
		$min=$outputArray[0];
2234
 
2235
		#找出最小值
2236
		for($i=1;$i<count($outputArray);$i++){
2237
 
2238
			#如果目前認爲的最小值大於後一個數字,
2239
			if($min["value"]>$outputArray[$i]["value"]){
2240
 
2241
				#則將較小的數字放進 $min 裏面,
2242
				$min=$outputArray[$i];
2243
 
2244
				}#判斷式結束
2245
 
2246
			}#迴圈結束		
2247
 
2248
		#取得最小值的原先key名稱
2249
		$result["key"]=$min["key"];	
2250
 
2251
		#取得最小值
2252
		$result["value"]=$min["value"];
2253
 
2254
		#設置執行正常
2255
		$result["status"]="true";
2256
 
2257
		#回傳最大值
2258
		return $result;
2259
 
2260
		}#函式結束
2261
 
2262
	/*
57 liveuser 2263
	#函式說明:
1 liveuser 2264
	#找絕對值後的最大值,結果會回傳最大值
57 liveuser 2265
	#回傳結果:
1 liveuser 2266
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2267
	#$result["error"],錯誤訊息陣列.
2268
	#$result["function"],當前執行的函數名稱.
2269
	#$result["key"],絕對值後的最大值原先的key.
2270
	#$result["value"],絕對值前的最大值數字.
2271
	#$result["absValue"],絕對值後的最大值數字.
57 liveuser 2272
	#必填參數:
1 liveuser 2273
	#$conf["rawDataArray"]=array();#爲原始數據
57 liveuser 2274
	#可省略參數:
2275
	#無.
201 liveuser 2276
	#參考資料:
2277
	#無.
57 liveuser 2278
	#備註:
2279
	#無.
1 liveuser 2280
	*/
2281
	public static function getMaxAbsoluteValue(&$conf){
2282
 
2283
		#初始化要回傳的內容
2284
		$result=array();
2285
 
2286
		#記錄當前執行的函數名稱
2287
		$result["function"]=__FUNCTION__;
2288
 
2289
		#如果 $conf 不為陣列
2290
		if(gettype($conf)!="array"){
2291
 
2292
			#設置執行失敗
2293
			$result["status"]="false";
2294
 
2295
			#設置執行錯誤訊息
2296
			$result["error"][]="\$conf變數須為陣列形態";
2297
 
2298
			#如果傳入的參數為 null
2299
			if($conf==null){
2300
 
2301
				#設置執行錯誤訊息
2302
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2303
 
2304
				}#if end
2305
 
2306
			#回傳結果
2307
			return $result;
2308
 
2309
			}#if end
2310
 
2311
		#檢查參數
2312
		#函式說明:
2313
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2314
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2315
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2316
		#$result["function"],當前執行的函式名稱.
2317
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2318
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2319
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2320
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2321
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2322
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2323
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2324
		#必填寫的參數:
2325
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2326
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2327
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2328
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
2329
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
2330
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
2331
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2332
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2333
		#可以省略的參數:
2334
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2335
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2336
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2337
		#$conf["skipableVariableName"]=array();
2338
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2339
		#$conf["skipableVariableType"]=array();
2340
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2341
		#$conf["skipableVarDefaultValue"]=array("");
2342
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2343
		#$conf["arrayCountEqualCheck"][]=array();
2344
		#參考資料來源:
2345
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2346
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2347
		unset($conf["variableCheck::checkArguments"]);
2348
 
2349
		#如果檢查參數失敗
2350
		if($checkArguments["status"]=="false"){
2351
 
2352
			#設置執行失敗
2353
			$result["status"]="false";
2354
 
2355
			#設置執行錯誤訊息
2356
			$result["error"]=$checkArguments;
2357
 
2358
			#回傳結果
2359
			return $result;
2360
 
2361
			}#if end
2362
 
2363
		#如果檢查不通過
2364
		if($checkArguments["passed"]=="false"){
2365
 
2366
			#設置執行失敗
2367
			$result["status"]="false";
2368
 
2369
			#設置執行錯誤訊息
2370
			$result["error"]=$checkArguments;
2371
 
2372
			#回傳結果
2373
			return $result;
2374
 
2375
			}#if end
2376
 
2377
		#初始化儲存要比較的數字陣列
2378
		$outputArray=array();
2379
 
2380
		#初始化技計數的變數
2381
		$count=0;
2382
 
2383
		#取得每個元素的key值
2384
		foreach($conf["rawDataArray"] as $key=>$value){
2385
 
2386
			#另存 key
2387
			$outputArray[$count]["key"]=$key;
2388
 
2389
			#另存 value
2390
			$outputArray[$count]["value"]=$value;
2391
 
2392
			#另存 絕對值過後的數值
2393
			$outputArray[$count]["absValue"]=abs($value);
2394
 
2395
			#計數+1
2396
			$count++;
2397
 
2398
			}#foreach end
2399
 
2400
		#假定第一個數字爲最大值
2401
		$max["value"]=$outputArray[0]["value"];
2402
		$max["key"]=$outputArray[0]["key"];
2403
		$max["absValue"]=$outputArray[0]["absValue"];
2404
 
2405
		#找出最大值
2406
		for($i=1;$i<count($conf["rawDataArray"]);$i++){
2407
 
2408
			#如果目前認爲的最大值小於後一個數字,
2409
			if($max["absValue"]<$outputArray[$i]["absValue"]){
2410
 
2411
				#則將較大的數字放進 $max 裏面,
2412
				$max["value"]=$outputArray[$i]["value"];
2413
				$max["key"]=$outputArray[$i]["key"];
2414
				$max["absValue"]=$outputArray[$i]["absValue"];
2415
 
2416
				}#判斷式結束
2417
 
2418
			}#迴圈結束	
2419
 
2420
		#儲存絕對值後最大值的資訊
2421
		$result["key"]=$max["key"];
2422
		$result["value"]=$max["value"];
2423
		$result["absValue"]=$max["absValue"];
2424
 
2425
		#設置執行正常 
2426
		$result["status"]="true";
2427
 
2428
		#回傳最大值
2429
		return $result;
2430
 
2431
		}#函式結束
2432
 
2433
	/*
57 liveuser 2434
	#函式說明:
1 liveuser 2435
	#找絕對值後的最小值
57 liveuser 2436
	#回傳結果:
1 liveuser 2437
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2438
	#$result["error"],錯誤訊息陣列.
2439
	#$result["function"],當前執行的函數名稱.
2440
	#$result["key"],絕對值後的最小值原先的key.
2441
	#$result["value"],絕對值前的最小值數字.
2442
	#$result["absValue"],絕對值後的最小值數字.
57 liveuser 2443
	#必填參數:
1 liveuser 2444
	$conf["rawDataArray"]=array();#爲原始數據
57 liveuser 2445
	#可省略參數:
2446
	#無.
201 liveuser 2447
	#參考資料:
2448
	#無.
57 liveuser 2449
	#備註:
2450
	#無.
1 liveuser 2451
	*/
2452
	public static function getMinAbsoluteValue(&$conf){
2453
 
2454
		#初始化要回傳的內容
2455
		$result=array();
2456
 
2457
		#記錄當前執行的函數名稱
2458
		$result["function"]=__FUNCTION__;
2459
 
2460
		#如果 $conf 不為陣列
2461
		if(gettype($conf)!="array"){
2462
 
2463
			#設置執行失敗
2464
			$result["status"]="false";
2465
 
2466
			#設置執行錯誤訊息
2467
			$result["error"][]="\$conf變數須為陣列形態";
2468
 
2469
			#如果傳入的參數為 null
2470
			if($conf==null){
2471
 
2472
				#設置執行錯誤訊息
2473
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2474
 
2475
				}#if end
2476
 
2477
			#回傳結果
2478
			return $result;
2479
 
2480
			}#if end
2481
 
2482
		#檢查參數
2483
		#函式說明:
2484
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2485
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2486
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2487
		#$result["function"],當前執行的函式名稱.
2488
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2489
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2490
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2491
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2492
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2493
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2494
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2495
		#必填寫的參數:
2496
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2497
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2498
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2499
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
2500
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
2501
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
2502
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2503
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2504
		#可以省略的參數:
2505
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2506
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2507
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2508
		#$conf["skipableVariableName"]=array();
2509
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2510
		#$conf["skipableVariableType"]=array();
2511
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2512
		#$conf["skipableVarDefaultValue"]=array("");
2513
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2514
		#$conf["arrayCountEqualCheck"][]=array();
2515
		#參考資料來源:
2516
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2517
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2518
		unset($conf["variableCheck::checkArguments"]);
2519
 
2520
		#如果檢查參數失敗
2521
		if($checkArguments["status"]=="false"){
2522
 
2523
			#設置執行失敗
2524
			$result["status"]="false";
2525
 
2526
			#設置執行錯誤訊息
2527
			$result["error"]=$checkArguments;
2528
 
2529
			#回傳結果
2530
			return $result;
2531
 
2532
			}#if end
2533
 
2534
		#如果檢查不通過
2535
		if($checkArguments["passed"]=="false"){
2536
 
2537
			#設置執行失敗
2538
			$result["status"]="false";
2539
 
2540
			#設置執行錯誤訊息
2541
			$result["error"]=$checkArguments;
2542
 
2543
			#回傳結果
2544
			return $result;
2545
 
2546
			}#if end
2547
 
2548
		#初始化儲存要比較的數字陣列
2549
		$outputArray=array();
2550
 
2551
		#初始化技計數的變數
2552
		$count=0;
2553
 
2554
		#取得每個元素的key值
2555
		foreach($conf["rawDataArray"] as $key=>$value){
2556
 
2557
			#另存 key
2558
			$outputArray[$count]["key"]=$key;
2559
 
2560
			#另存 value
2561
			$outputArray[$count]["value"]=$value;
2562
 
2563
			#另存 絕對值過後的數值
2564
			$outputArray[$count]["absValue"]=abs($value);
2565
 
2566
			#計數+1
2567
			$count++;
2568
 
2569
			}#foreach end
2570
 
2571
		#假定第一個數字爲最大值
2572
		$min["value"]=$outputArray[0]["value"];
2573
		$min["key"]=$outputArray[0]["key"];
2574
		$min["absValue"]=$outputArray[0]["absValue"];
2575
 
2576
		#找出最大值
2577
		for($i=1;$i<count($conf["rawDataArray"]);$i++){
2578
 
2579
			#如果目前認爲的最小值大於後一個數字,
2580
			if($min["absValue"]>$outputArray[$i]["absValue"]){
2581
 
2582
				#則將較大的數字放進 $max 裏面,
2583
				$min["value"]=$outputArray[$i]["value"];
2584
				$min["key"]=$outputArray[$i]["key"];
2585
				$min["absValue"]=$outputArray[$i]["absValue"];
2586
 
2587
				}#判斷式結束
2588
 
2589
			}#迴圈結束	
2590
 
2591
		#儲存絕對值後最大值的資訊
2592
		$result["key"]=$min["key"];
2593
		$result["value"]=$min["value"];
2594
		$result["absValue"]=$min["absValue"];
2595
 
2596
		#設置執行正常 
2597
		$result["status"]="true";
2598
 
2599
		#回傳最大值
2600
		return $result;
2601
 
2602
		}#函式結束
2603
 
2604
	/*
57 liveuser 2605
	#函式說明:
1 liveuser 2606
	#使用 min-max normalization 來正規化一組數據,結果會回傳一組正規化後的數據,$newDataArray[$i]爲該筆資料的第i筆經過正規化後的數值。
57 liveuser 2607
	#回傳結果:
1 liveuser 2608
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2609
	#$result["error"],錯誤訊息陣列.
2610
	#$result["function"],當前執行的函數名稱.
2611
	#$result["original"] 爲回傳後的原始數據陣列,$result爲回傳後給與的變數名稱,可自行改變。
2612
	#$result["normalizationed"] 爲正規化後的陣列數據
57 liveuser 2613
	#必填參數:
2614
	$conf["rawDataArray"]=array();#爲傳入的原始數據參數.
2615
	#可省略參數:
2616
	#無.
201 liveuser 2617
	#參考資料:
2618
	#無.
57 liveuser 2619
	#備註:
2620
	#無.
1 liveuser 2621
	*/
2622
	public static function minMaxNormalization($conf){
2623
 
2624
		#初始化要回傳的內容
2625
		$result=array();
2626
 
2627
		#記錄當前執行的函數名稱
2628
		$result["function"]=__FUNCTION__;
2629
 
2630
		#如果 $conf 不為陣列
2631
		if(gettype($conf)!="array"){
2632
 
2633
			#設置執行失敗
2634
			$result["status"]="false";
2635
 
2636
			#設置執行錯誤訊息
2637
			$result["error"][]="\$conf變數須為陣列形態";
2638
 
2639
			#如果傳入的參數為 null
2640
			if($conf==null){
2641
 
2642
				#設置執行錯誤訊息
2643
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2644
 
2645
				}#if end
2646
 
2647
			#回傳結果
2648
			return $result;
2649
 
2650
			}#if end
2651
 
2652
		#檢查參數
2653
		#函式說明:
2654
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2655
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2656
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2657
		#$result["function"],當前執行的函式名稱.
2658
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2659
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2660
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2661
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2662
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2663
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2664
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2665
		#必填寫的參數:
2666
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2667
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2668
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2669
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
2670
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
2671
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
2672
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2673
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2674
		#可以省略的參數:
2675
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2676
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2677
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2678
		#$conf["skipableVariableName"]=array();
2679
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2680
		#$conf["skipableVariableType"]=array();
2681
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2682
		#$conf["skipableVarDefaultValue"]=array("");
2683
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2684
		#$conf["arrayCountEqualCheck"][]=array();
2685
		#參考資料來源:
2686
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2687
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2688
		unset($conf["variableCheck::checkArguments"]);
2689
 
2690
		#如果檢查參數失敗
2691
		if($checkArguments["status"]=="false"){
2692
 
2693
			#設置執行失敗
2694
			$result["status"]="false";
2695
 
2696
			#設置執行錯誤訊息
2697
			$result["error"]=$checkArguments;
2698
 
2699
			#回傳結果
2700
			return $result;
2701
 
2702
			}#if end
2703
 
2704
		#如果檢查不通過
2705
		if($checkArguments["passed"]=="false"){
2706
 
2707
			#設置執行失敗
2708
			$result["status"]="false";
2709
 
2710
			#設置執行錯誤訊息
2711
			$result["error"]=$checkArguments;
2712
 
2713
			#回傳結果
2714
			return $result;
2715
 
2716
			}#if end
2717
 
2718
		#取得最大值
57 liveuser 2719
		#回傳結果:
1 liveuser 2720
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2721
		#$result["error"],錯誤訊息陣列.
2722
		#$result["function"],當前執行的函數名稱.
2723
		#$result["key"],最大值原先的key.
2724
		#$result["value"],最大值的數字.
2725
		$conf["math"]["getMaxValue"]["rawDataArray"]=$conf["rawDataArray"];
2726
		$tempMax=math::getMaxValue($conf["math"]["getMaxValue"]);
2727
		unset($conf["math"]["getMaxValue"]);			
2728
 
2729
		#如果取得最大值失敗
2730
		if($tempMax["status"]=="false"){
2731
 
2732
			#設置執行失敗
2733
			$result["status"]="false";
2734
 
2735
			#設置執行錯誤訊息
2736
			$result["error"]=$tempMax;
2737
 
2738
			#回傳結果
2739
			return $result;
2740
 
2741
			}#if end
2742
 
2743
		#取得最大值
2744
		$max=$tempMax["value"];
2745
 
2746
		#取得最小值
2747
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2748
		#$result["error"],錯誤訊息陣列.
2749
		#$result["function"],當前執行的函數名稱.
2750
		#$result["key"],最大值原先的key.
2751
		#$result["value"],陣列裏面最小的數值.
2752
		$conf["math"]["getMinValue"]["rawDataArray"]=$conf["rawDataArray"];
2753
		$min=math::getMinValue($conf["math"]["getMinValue"]);
2754
		unset($conf["math"]["getMinValue"]);	
2755
 
2756
		#如果取得最小值失敗
2757
		if($min["status"]=="false"){
2758
 
2759
			#設置執行失敗
2760
			$result["status"]="false";
2761
 
2762
			#設置執行錯誤訊息
2763
			$result["error"]=$min;
2764
 
2765
			#回傳結果
2766
			return $result;
2767
 
2768
			}#if end
2769
 
2770
		#取得最小值 
2771
		$min=$min["value"];
2772
 
2773
		#將每組數據正規化
2774
		for($i=0;$i<count($conf["rawDataArray"]);$i++){
2775
 
2776
			#每筆數據減掉最小值然後再除以最大值減最小值
2777
			$newDataArray[$i]=($conf["rawDataArray"][$i]-$min)/($max-$min);			
2778
 
2779
			}#迴圈結束
2780
 
2781
		#儲存原始數據
2782
		$result["original"]=$conf["rawDataArray"];
2783
 
2784
		#儲存正規化後的數據
2785
		$result["normalizationed"]=$newDataArray;
2786
 
2787
		#設置執行正常
2788
		$result["status"]="true";
2789
 
2790
		#回傳正規化完後的數據
2791
		return $result;
2792
 
2793
		}#函式結束
2794
 
2795
	/*
57 liveuser 2796
	#函式說明:
1 liveuser 2797
	#求算該值需要10的幾次方去除才會最接近1,但小於1。
57 liveuser 2798
	#回傳結果:
1 liveuser 2799
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2800
	#$result["error"],錯誤訊息陣列.
2801
	#$result["function"],當前執行的函數名稱.
2802
	#$result["content"],Jvalue,n值需要10的幾次方去除才會最接近1,但小於1.
57 liveuser 2803
	#必填參數:
1 liveuser 2804
	$conf["num"]="";#字串,爲輸入的數值.
57 liveuser 2805
	#可省略參數:
2806
	#無.
201 liveuser 2807
	#參考資料:
2808
	#無.
57 liveuser 2809
	#備註:
2810
	#無.
1 liveuser 2811
	*/
2812
	public static function findJvalue(&$conf){
2813
 
2814
		#初始化要回傳的內容
2815
		$result=array();
2816
 
2817
		#記錄當前執行的函數名稱
2818
		$result["function"]=__FUNCTION__;
2819
 
2820
		#初始化 Jvalue
2821
		$result["content"]="";
2822
 
2823
		#如果 $conf 不為陣列
2824
		if(gettype($conf)!="array"){
2825
 
2826
			#設置執行失敗
2827
			$result["status"]="false";
2828
 
2829
			#設置執行錯誤訊息
2830
			$result["error"][]="\$conf變數須為陣列形態";
2831
 
2832
			#如果傳入的參數為 null
2833
			if($conf==null){
2834
 
2835
				#設置執行錯誤訊息
2836
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2837
 
2838
				}#if end
2839
 
2840
			#回傳結果
2841
			return $result;
2842
 
2843
			}#if end
2844
 
2845
		#檢查參數
2846
		#函式說明:
2847
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2848
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2849
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2850
		#$result["function"],當前執行的函式名稱.
2851
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2852
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2853
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2854
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2855
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2856
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2857
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2858
		#必填寫的參數:
2859
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2860
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2861
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2862
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("num");
2863
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
2864
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
2865
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2866
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2867
		#可以省略的參數:
2868
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2869
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2870
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2871
		#$conf["skipableVariableName"]=array();
2872
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2873
		#$conf["skipableVariableType"]=array();
2874
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2875
		#$conf["skipableVarDefaultValue"]=array("");
2876
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2877
		#$conf["arrayCountEqualCheck"][]=array();
2878
		#參考資料來源:
2879
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2880
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2881
		unset($conf["variableCheck::checkArguments"]);
2882
 
2883
		#如果檢查參數失敗
2884
		if($checkArguments["status"]=="false"){
2885
 
2886
			#設置執行失敗
2887
			$result["status"]="false";
2888
 
2889
			#設置執行錯誤訊息
2890
			$result["error"]=$checkArguments;
2891
 
2892
			#回傳結果
2893
			return $result;
2894
 
2895
			}#if end
2896
 
2897
		#如果檢查不通過
2898
		if($checkArguments["passed"]=="false"){
2899
 
2900
			#設置執行失敗
2901
			$result["status"]="false";
2902
 
2903
			#設置執行錯誤訊息
2904
			$result["error"]=$checkArguments;
2905
 
2906
			#回傳結果
2907
			return $result;
2908
 
2909
			}#if end
2910
 
2911
		#重複執行
2912
		for($i=1;$i>0;$i++){
2913
 
2914
			#當該值除以10的$i次方後小於1則停止
2915
			if(($conf["num"]/pow(10,$i))<1){
2916
 
2917
				#給與 $jValue 數值
2918
				$result["content"]=$i;
2919
 
2920
				#中斷,跳出迴圈
2921
				break;	
2922
 
2923
				}#判斷式結束
2924
 
2925
			}#迴圈結束
2926
 
2927
		#設置執行正常
2928
		$result["status"]="true";
2929
 
2930
		#回傳結果
2931
		return $result;
2932
 
2933
		}#funciton findJvalue end
2934
 
2935
	/*
57 liveuser 2936
	#函式說明:
1 liveuser 2937
	#透過 Decimal scaling 來縮放原始數據
57 liveuser 2938
	#回傳結果:
1 liveuser 2939
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2940
	#$result["error"],錯誤訊息陣列.
2941
	#$result["function"],當前執行的函數名稱.
2942
	#$result["content"],經過Decimal scaling縮放後的數據陣列.
57 liveuser 2943
	#必填參數:
1 liveuser 2944
	$conf["rawDataArray"]="";#爲傳入的原始數據參數
57 liveuser 2945
	#可省略參數:
2946
	#無.
201 liveuser 2947
	#參考資料:
2948
	#無.
57 liveuser 2949
	#備註:
2950
	#無.
1 liveuser 2951
	*/
2952
	public static function computeDecimalScaling($conf){
2953
 
2954
		#初始化要回傳的內容
2955
		$result=array();
2956
 
2957
		#記錄當前執行的函數名稱
2958
		$result["function"]=__FUNCTION__;
2959
 
2960
		#如果 $conf 不為陣列
2961
		if(gettype($conf)!="array"){
2962
 
2963
			#設置執行失敗
2964
			$result["status"]="false";
2965
 
2966
			#設置執行錯誤訊息
2967
			$result["error"][]="\$conf變數須為陣列形態";
2968
 
2969
			#如果傳入的參數為 null
2970
			if($conf==null){
2971
 
2972
				#設置執行錯誤訊息
2973
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2974
 
2975
				}#if end
2976
 
2977
			#回傳結果
2978
			return $result;
2979
 
2980
			}#if end
2981
 
2982
		#檢查參數
2983
		#函式說明:
2984
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2985
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2986
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2987
		#$result["function"],當前執行的函式名稱.
2988
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2989
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2990
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2991
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2992
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2993
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2994
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2995
		#必填寫的參數:
2996
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2997
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2998
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2999
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArray");
3000
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
3001
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
3002
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3003
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3004
		#可以省略的參數:
3005
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3006
		#$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3007
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3008
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
3009
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3010
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
3011
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3012
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
3013
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3014
		#$conf["arrayCountEqualCheck"][]=array();
3015
		#參考資料來源:
3016
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3017
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3018
		unset($conf["variableCheck::checkArguments"]);
3019
 
3020
		#如果檢查參數失敗
3021
		if($checkArguments["status"]=="false"){
3022
 
3023
			#設置執行失敗
3024
			$result["status"]="false";
3025
 
3026
			#設置執行錯誤訊息
3027
			$result["error"]=$checkArguments;
3028
 
3029
			#回傳結果
3030
			return $result;
3031
 
3032
			}#if end
3033
 
3034
		#如果檢查不通過
3035
		if($checkArguments["passed"]=="false"){
3036
 
3037
			#設置執行失敗
3038
			$result["status"]="false";
3039
 
3040
			#設置執行錯誤訊息
3041
			$result["error"]=$checkArguments;
3042
 
3043
			#回傳結果
3044
			return $result;
3045
 
3046
			}#if end
3047
 
3048
		#計算資料總筆數
3049
		$dataCounts=count($conf["rawDataArray"]);
3050
 
3051
		#取得該筆資料的絕對值後的最大值
57 liveuser 3052
		#回傳結果:
1 liveuser 3053
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
3054
		#$result["error"],錯誤訊息陣列.
3055
		#$result["function"],當前執行的函數名稱.
3056
		#$result["key"],絕對值後的最大值原先的key.
3057
		#$result["value"],絕對值前的最大值數字.
3058
		#$result["absValue"],絕對值後的最大值數字.
3059
		$conf["math"]["getMaxAbsoluteValue"]["rawDataArray"]=$conf["rawDataArray"];
3060
		$maxAbs=math::getMaxAbsoluteValue($conf["math"]["getMaxAbsoluteValue"]);
3061
		unset($conf["math"]["getMaxAbsoluteValue"]);
3062
 
3063
		#如果 取得該筆資料的絕對值後的最大值 失敗
3064
		if($maxAbs["status"]=="false"){
3065
 
3066
			#設置執行失敗
3067
			$result["status"]="false";
3068
 
3069
			#設置執行錯誤訊息
3070
			$result["error"]=$maxAbs;
3071
 
3072
			#回傳結果
3073
			return $result;
3074
 
3075
			}#if end
3076
 
3077
		#取得該筆資料的絕對值後的最大值
3078
		$maxAbs=$maxAbs["absValue"];
3079
 
3080
		#求算最大值需要10的幾次方去除才會最接近1,但小於1。
57 liveuser 3081
		#回傳結果:
1 liveuser 3082
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
3083
		#$result["error"],錯誤訊息陣列.
3084
		#$result["function"],當前執行的函數名稱.
3085
		#$result["content"],Jvalue,n值需要10的幾次方去除才會最接近1,但小於1.
3086
		$conf["math"]["findJvalue"]["num"]=$maxAbs."";
3087
		$findJvalue=math::findJvalue($conf["math"]["findJvalue"]);
3088
		unset($conf["math"]["findJvalue"]);
3089
 
3090
		#如果取得jValue失敗
3091
		if($findJvalue["status"]=="false"){
3092
 
3093
			#設置執行失敗
3094
			$result["status"]="false";
3095
 
3096
			#設置執行錯誤訊息
3097
			$result["error"]=$findJvalue;
3098
 
3099
			#回傳結果
3100
			return $result;
3101
 
3102
			}#if end
3103
 
3104
		#取得jValue
3105
		$jValue=$findJvalue["content"];
3106
 
3107
		#將原始數據進行 Decimal scaling
3108
		for($i=0;$i<count($conf["rawDataArray"]);$i++){
3109
 
3110
			#每筆數除以10的j次方
3111
			$newDataArray[$i]=$conf["rawDataArray"][$i]/pow(10,$jValue);			
3112
 
3113
			}#迴圈結束			
3114
 
3115
		#將 scaling 化的數據存入 $result["oldValue"] 陣列變數裏面
3116
		$result["oldValue"]=$conf["rawDataArray"];
3117
 
3118
		#將原始數據存入 $result["oldValue"] 陣列變數裏面
3119
		$result["newValue"]=$newDataArray;
3120
 
3121
		#設置執行正常
3122
		$result["status"]="true";
3123
 
3124
		#回傳結果
3125
		return $result;		
3126
 
3127
		}#function computeDecimalScaling end
3128
 
3129
	/*
57 liveuser 3130
	#函式說明:
1 liveuser 3131
	#將用於統計分析的原始陣列裏面,每筆資料的特定欄位爲0的時候,將該筆樣本踢除
57 liveuser 3132
	#回傳結果:
1 liveuser 3133
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
3134
	#$result["error"],錯誤訊息陣列.
3135
	#$result["function"],當前執行的函數名稱.
3136
	#$result["rowTitle"],欄位的標題.
3137
	#$result["content"],處理好的二維陣列.
3138
	#$result["content"][lineNumber]["columnName"],lineNumber爲第幾列;columnName爲欄位的名稱,若沒有標題列將會以數字的0、1、2、3~n去排列
57 liveuser 3139
	#必填參數:
1 liveuser 3140
	#$conf["varArray"],二維陣列,要處理的陣列變數$conf["varArray"][$i][$j],代表第$i列第$j行的數據,$conf["varArray"][0],可代表各欄位的標題列.
3141
	$conf["varArray"]=array(array());
3142
	#$conf["checkedColumn"],字串,要檢測是否含有0的欄位名稱;亦即 $conf["varArray"]["columnName"] 的 columnName 爲何.
3143
	$conf["checkedColumn"]=array();
57 liveuser 3144
	#可省略參數:
1 liveuser 3145
	#$conf["repeatExecTimeLimitTo"],整數,$conf["varArray"]底下的陣列,每執行一次後要重新給與多少執行時間,預設為 php.ini 的max_execution_time.
3146
	#$conf["repeatExecTimeLimitTo"]=ini_get("max_execution_time");
201 liveuser 3147
	#參考資料:
3148
	#無.
1 liveuser 3149
	#備註:
3150
	#若資料量大,則建議在command line環境執行.
3151
	*/
3152
	public static function eraseContainZeroData(&$conf){
3153
 
3154
		#初始化要回傳的內容
3155
		$result=array();
3156
 
3157
		#記錄當前執行的函數名稱
3158
		$result["function"]=__FUNCTION__;
3159
 
3160
		#如果 $conf 不為陣列
3161
		if(gettype($conf)!="array"){
3162
 
3163
			#設置執行失敗
3164
			$result["status"]="false";
3165
 
3166
			#設置執行錯誤訊息
3167
			$result["error"][]="\$conf變數須為陣列形態";
3168
 
3169
			#如果傳入的參數為 null
3170
			if($conf==null){
3171
 
3172
				#設置執行錯誤訊息
3173
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3174
 
3175
				}#if end
3176
 
3177
			#回傳結果
3178
			return $result;
3179
 
3180
			}#if end
3181
 
3182
		#檢查參數
3183
		#函式說明:
3184
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3185
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3186
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3187
		#$result["function"],當前執行的函式名稱.
3188
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3189
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3190
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3191
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3192
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3193
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3194
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3195
		#必填寫的參數:
3196
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3197
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3198
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3199
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("varArray","checkedColumn");
3200
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
3201
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
3202
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3203
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3204
		#可以省略的參數:
3205
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3206
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3207
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3208
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("repeatExecTimeLimitTo");
3209
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3210
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("integer");
3211
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3212
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(ini_get("max_execution_time"));
3213
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3214
		#$conf["arrayCountEqualCheck"][]=array();
3215
		#參考資料來源:
3216
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3217
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3218
		unset($conf["variableCheck::checkArguments"]);
3219
 
3220
		#如果檢查參數失敗
3221
		if($checkArguments["status"]=="false"){
3222
 
3223
			#設置執行失敗
3224
			$result["status"]="false";
3225
 
3226
			#設置執行錯誤訊息
3227
			$result["error"]=$checkArguments;
3228
 
3229
			#回傳結果
3230
			return $result;
3231
 
3232
			}#if end
3233
 
3234
		#如果檢查不通過
3235
		if($checkArguments["passed"]=="false"){
3236
 
3237
			#設置執行失敗
3238
			$result["status"]="false";
3239
 
3240
			#設置執行錯誤訊息
3241
			$result["error"]=$checkArguments;
3242
 
3243
			#回傳結果
3244
			return $result;
3245
 
3246
			}#if end
3247
 
3248
		#有幾筆資料就執行幾次
3249
		for($i=0;$i<count($conf["varArray"]);$i++){
3250
 
3251
			#初始化要不要捨棄該筆資料的變數
3252
			$drop="false";
3253
 
3254
			#針對第$i+1列
3255
			foreach($conf["varArray"][$i] as $questName=>$questVal){
3256
 
57 liveuser 3257
				#函式說明:
1 liveuser 3258
				#檢查某個元素是否存在於該一維陣列變數裏面
57 liveuser 3259
				#回傳結果:
1 liveuser 3260
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3261
				#$reuslt["error"],執行不正常結束的錯訊息陣列.
3262
				#$result["function"],當前執行的函式名稱.
3263
				#$result["founded"],"true",表示該元素已經存在於該一維陣列變數裏面,"false"表示該元素不存在於該一維陣列變數裏面.
3264
				#必填寫的參數:
3265
				$conf["variableCheck"]["checkElementExistFromAnArray"]["searchString"]=$questName;#要搜尋的元素內容
3266
				$conf["variableCheck"]["checkElementExistFromAnArray"]["searchArray"]=$conf["checkedColumn"];#要搜尋的陣列變數		
3267
				$checkResult=variableCheck::checkElementExistFromAnArray($conf["variableCheck"]["checkElementExistFromAnArray"]);
3268
				unset($conf["variableCheck"]["checkElementExistFromAnArray"]);
3269
 
3270
				#如果檢查失敗
3271
				if($checkResult["status"]=="false"){
3272
 
3273
					#設置執行失敗
3274
					$result["status"]="false";
3275
 
3276
					#設置執行錯誤訊息
3277
					$result["error"]=$checkResult;
3278
 
3279
					#回傳結果
3280
					return $result;
3281
 
3282
					}#if end
3283
 
3284
				#如果是要檢查的欄位
3285
				if($checkResult["founded"]==="true"){
3286
 
3287
					#如果值等於 0
3288
					if($questVal===0 || $questVal==="0"){
3289
 
3290
						#標記該筆樣本要捨棄
3291
						$drop="true";
3292
 
3293
						#跳出foreach
3294
						break;
3295
 
3296
						}#if end							
3297
 
3298
					}#if end
3299
 
3300
				}#foreache end
3301
 
3302
			#如果沒有要捨棄該樣本標記
3303
			if($drop!="true"){
3304
 
3305
				#取得該筆資料
3306
				$result["content"][]=$conf["varArray"][$i];
3307
 
3308
				}#if end
3309
 
3310
			#函數說明:
3311
			#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.
3312
			#回傳結果:
3313
			#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
3314
			#$result["error"],錯誤訊息陣列.
3315
			#$result["function"],當前執行的函數名稱.
3316
			#必填參數:
3317
			#$conf["sec"],整數,要延長多少執行時間,單位爲秒
3318
			$conf["config::delayRunTimeExectionMax"]["sec"]=$conf["repeatExecTimeLimitTo"];
3319
			#參考資料:
3320
			#http://php.net/manual/en/function.set-time-limit.php
3321
			$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);
3322
			unset($conf["config::delayRunTimeExectionMax"]);
3323
 
3324
			#如果執行失敗
3325
			if($delayRunTimeExectionMax["status"]==="false"){
3326
 
3327
				#設定類別圖繪製失敗
3328
				$result["status"]="false";			
3329
 
3330
				#設定該檔案的類別圖繪製失敗提示
3331
				$result["error"]=$delayRunTimeExectionMax;
3332
 
3333
				#回傳結果
3334
				return $result;
3335
 
3336
				}#if end		
3337
 
3338
			}#for end
3339
 
3340
		#設置執行正常
3341
		$result["status"]="true";
3342
 
3343
		#回傳結果
3344
		return $result;
3345
 
3346
		}#funciton eraseContainZeroData end
3347
 
3348
	/*
3349
	#函式說明:
3350
	#將陣列裡面小於等於自己的正整數或大於等於自己的負整數
57 liveuser 3351
	#回傳結果:
1 liveuser 3352
	#$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
3353
	#$result["error"],錯誤訊息陣列.
3354
	#$result["function"],當前執行的函數名稱.
3355
	#$result["content"],處理好的整數陣列.
57 liveuser 3356
	#必填參數:
1 liveuser 3357
	#$conf["inputArray"],字串陣列,要取整數的數字陣列.
3358
	$conf["inputArray"]=array();
57 liveuser 3359
	#可省略參數:
1 liveuser 3360
	#無
202 liveuser 3361
	#參考資料:
1 liveuser 3362
	#http://tw2.php.net/manual/en/function.round.php
57 liveuser 3363
	#備註:
3364
	#無.
1 liveuser 3365
	*/ 
3366
	public static function changeToIntValue(&$conf){
3367
 
3368
		#初始化要回傳的內容
3369
		$result=array();
3370
 
3371
		#記錄當前執行的函數名稱
3372
		$result["function"]=__FUNCTION__;
3373
 
3374
		#如果 $conf 不為陣列
3375
		if(gettype($conf)!="array"){
3376
 
3377
			#設置執行失敗
3378
			$result["status"]="false";
3379
 
3380
			#設置執行錯誤訊息
3381
			$result["error"][]="\$conf變數須為陣列形態";
3382
 
3383
			#如果傳入的參數為 null
3384
			if($conf==null){
3385
 
3386
				#設置執行錯誤訊息
3387
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3388
 
3389
				}#if end
3390
 
3391
			#回傳結果
3392
			return $result;
3393
 
3394
			}#if end
3395
 
3396
		#檢查參數
3397
		#函式說明:
3398
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3399
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3400
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3401
		#$result["function"],當前執行的函式名稱.
3402
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3403
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3404
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3405
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3406
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3407
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3408
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3409
		#必填寫的參數:
3410
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3411
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3412
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3413
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("inputArray");
3414
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
3415
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
3416
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3417
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3418
		#可以省略的參數:
3419
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3420
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3421
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3422
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
3423
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3424
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
3425
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3426
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
3427
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3428
		#$conf["arrayCountEqualCheck"][]=array();
3429
		#參考資料來源:
3430
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3431
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3432
		unset($conf["variableCheck::checkArguments"]);
3433
 
3434
		#如果檢查參數失敗
3435
		if($checkArguments["status"]=="false"){
3436
 
3437
			#設置執行失敗
3438
			$result["status"]="false";
3439
 
3440
			#設置執行錯誤訊息
3441
			$result["error"]=$checkArguments;
3442
 
3443
			#回傳結果
3444
			return $result;
3445
 
3446
			}#if end
3447
 
3448
		#如果檢查不通過
3449
		if($checkArguments["passed"]=="false"){
3450
 
3451
			#設置執行失敗
3452
			$result["status"]="false";
3453
 
3454
			#設置執行錯誤訊息
3455
			$result["error"]=$checkArguments;
3456
 
3457
			#回傳結果
3458
			return $result;
3459
 
3460
			}#if end
3461
 
3462
		#針對每個數字陣列元素
3463
		foreach($conf["inputArray"] as $numKey=>$numValue){
3464
 
3465
			#取成小於等於$numValue的正整數,與大於等於$numValue的負整數
3466
			$numValue=round($numValue,0,PHP_ROUND_HALF_EVEN);
3467
 
3468
			#轉換為 int 型別,並存在原始以key為名的陣列中
3469
			$result["content"][$numKey]=$numValue;
3470
 
3471
			}#foreach end
3472
 
3473
		#設置執行成功的識別
3474
		$result["status"]="true";
3475
 
3476
		#回傳結果
3477
		return $result;
3478
 
3479
		}#function changeToIntValue end	
3480
 
3481
	/*
3482
	#函式說明: 
3483
	#亂數產生特定陣列裡面的內容
57 liveuser 3484
	#回傳結果:
1 liveuser 3485
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3486
	#$result["function"],當前執行的函數名稱.
3487
	#$result["error"],錯誤訊息陣列.
3488
	#$result["content"]["name"],產生的元素在$conf["randomArray"]裡面的key是?
3489
	#$result["content"]["value"],產生的元素內容.
3490
	#必填參數:
3491
	#$conf["randomArray"],字串陣列,要隨機產生的元素.
3492
	$conf["randomArray"]=array();
3493
	#可省略參數:
3494
	#無
201 liveuser 3495
	#參考資料:
3496
	#無.
57 liveuser 3497
	#備註:
3498
	#無.
1 liveuser 3499
	*/
3500
	public static function randomFromArray($conf){
3501
 
3502
		#初始化要回傳的內容
3503
		$result=array();
3504
 
3505
		#記錄當前執行的函數名稱
3506
		$result["function"]=__FUNCTION__;
3507
 
3508
		#如果 $conf 不為陣列
3509
		if(gettype($conf)!="array"){
3510
 
3511
			#設置執行失敗
3512
			$result["status"]="false";
3513
 
3514
			#設置執行錯誤訊息
3515
			$result["error"][]="\$conf變數須為陣列形態";
3516
 
3517
			#如果傳入的參數為 null
3518
			if($conf==null){
3519
 
3520
				#設置執行錯誤訊息
3521
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3522
 
3523
				}#if end
3524
 
3525
			#回傳結果
3526
			return $result;
3527
 
3528
			}#if end
3529
 
3530
		#檢查參數
3531
		#函式說明:
3532
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3533
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3534
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3535
		#$result["function"],當前執行的函式名稱.
3536
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3537
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3538
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3539
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3540
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3541
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3542
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3543
		#必填寫的參數:
3544
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3545
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3546
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3547
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("randomArray");
3548
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
3549
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
3550
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3551
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3552
		#可以省略的參數:
3553
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3554
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3555
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3556
		#$conf["skipableVariableName"]=array();
3557
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3558
		#$conf["skipableVariableType"]=array();
3559
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3560
		#$conf["skipableVarDefaultValue"]=array("");
3561
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3562
		#$conf["arrayCountEqualCheck"][]=array();
3563
		#參考資料來源:
3564
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3565
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3566
		unset($conf["variableCheck::checkArguments"]);
3567
 
3568
		#如果檢查參數失敗
3569
		if($checkArguments["status"]=="false"){
3570
 
3571
			#設置執行失敗
3572
			$result["status"]="false";
3573
 
3574
			#設置執行錯誤訊息
3575
			$result["error"]=$checkArguments;
3576
 
3577
			#回傳結果
3578
			return $result;
3579
 
3580
			}#if end
3581
 
3582
		#如果檢查不通過
3583
		if($checkArguments["passed"]=="false"){
3584
 
3585
			#設置執行失敗
3586
			$result["status"]="false";
3587
 
3588
			#設置執行錯誤訊息
3589
			$result["error"]=$checkArguments;
3590
 
3591
			#回傳結果
3592
			return $result;
3593
 
3594
			}#if end
3595
 
3596
		#取得用於隨機產生的元素數目
3597
		$randomCount=\count($conf["randomArray"]);
3598
 
3599
		#產生的亂數
3600
		$number=\rand(0,$randomCount-1);
3601
 
3602
		#取得產生出來的亂數
3603
		$result["content"]["key"]=$number;
3604
 
3605
		#取得亂數對應的內容
3606
		$result["content"]["value"]=$conf["randomArray"][$number];
3607
 
3608
		#設置執行成功
3609
		$result["status"]="true";
3610
 
3611
		#回傳結果
3612
		return $result;
3613
 
3614
		}#function randomFromArray end
3615
 
3616
	/*
3617
	#函式說明: 
3618
	#左方數值範圍要對應的右方數值範圍
57 liveuser 3619
	#回傳結果:
1 liveuser 3620
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3621
	#$result["function"],當前執行的函數名稱.
3622
	#$result["error"],錯誤訊息陣列.
3623
	#$result["argu"],使用的參數.
3624
	#$result["content"],左邊數值對應右邊數值的對照表.
3625
	#必填參數:
3626
	#$conf["rangeF"],整數陣列,要產生對應表的左手方
3627
	$conf["rangeF"]=array();
3628
	#可省略參數:
3629
	#$conf["rangeT"],整數陣列,要產生對應表的右手方,預設為0到100的整數.
3630
	#$conf["rangeT"]=array();
201 liveuser 3631
	#參考資料:
3632
	#無.
57 liveuser 3633
	#備註:
3634
	#無.
1 liveuser 3635
	*/
3636
	public static function key2value($conf){
3637
 
3638
		#初始化要回傳的內容
3639
		$result=array();
3640
 
3641
		#記錄當前執行的函數名稱
3642
		$result["function"]=__FUNCTION__;
3643
 
3644
		#如果 $conf 不為陣列
3645
		if(gettype($conf)!="array"){
3646
 
3647
			#設置執行失敗
3648
			$result["status"]="false";
3649
 
3650
			#設置執行錯誤訊息
3651
			$result["error"][]="\$conf變數須為陣列形態";
3652
 
3653
			#如果傳入的參數為 null
3654
			if($conf==null){
3655
 
3656
				#設置執行錯誤訊息
3657
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3658
 
3659
				}#if end
3660
 
3661
			#回傳結果
3662
			return $result;
3663
 
3664
			}#if end
3665
 
3666
		#取得使用的參數
3667
		$result["argu"]=$conf;
3668
 
3669
		#檢查參數
3670
		#函式說明:
3671
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3672
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3673
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3674
		#$result["function"],當前執行的函式名稱.
3675
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3676
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3677
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3678
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3679
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3680
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3681
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3682
		#必填寫的參數:
3683
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3684
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3685
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3686
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rangeF");
3687
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
3688
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
3689
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3690
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3691
		#可以省略的參數:
3692
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3693
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3694
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3695
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("rangeT");
3696
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3697
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3698
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3699
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3700
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3701
		#$conf["arrayCountEqualCheck"][]=array();
3702
		#參考資料來源:
3703
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3704
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3705
		unset($conf["variableCheck::checkArguments"]);
3706
 
3707
		#如果檢查參數失敗
3708
		if($checkArguments["status"]=="false"){
3709
 
3710
			#設置執行失敗
3711
			$result["status"]="false";
3712
 
3713
			#設置執行錯誤訊息
3714
			$result["error"]=$checkArguments;
3715
 
3716
			#回傳結果
3717
			return $result;
3718
 
3719
			}#if end
3720
 
3721
		#如果檢查不通過
3722
		if($checkArguments["passed"]=="false"){
3723
 
3724
			#設置執行失敗
3725
			$result["status"]="false";
3726
 
3727
			#設置執行錯誤訊息
3728
			$result["error"]=$checkArguments;
3729
 
3730
			#回傳結果
3731
			return $result;
3732
 
3733
			}#if end
3734
 
3735
		#如果右手方對應的整數陣列不存在
3736
		if(!isset($conf["rangeT"])){
3737
 
3738
			#跑101次
3739
			for($i=0;$i<=100;$i++){
3740
 
3741
				#設置rangeT
3742
				$conf["rangeT"][]=$i;
3743
 
3744
				}#for end
3745
 
3746
			}#if end
3747
 
3748
		#取得左手邊的數值數目
3749
		$rangeFc=count($conf["rangeF"]);
3750
 
3751
		#取得右手邊的數值數目
3752
		$rangeTc=count($conf["rangeT"]);
3753
 
3754
		#一單位的 $rangeTc 等於多少 $rangeFc
3755
		$tPerunitF=$rangeTc/$rangeFc;
3756
 
3757
		#針對每個 $rangeFc
3758
		for($i=0;$i<$rangeFc;$i++){
3759
 
3760
			#設置轉換的結果
3761
			$result["content"][$conf["rangeF"][$i]]=$tPerunitF*$i+$conf["rangeT"][0];
3762
 
3763
			#轉換後的數值不能超過左手邊的最大值
3764
			if($result["content"][$conf["rangeF"][$i]]>$conf["rangeT"][count($conf["rangeT"])-1]){
3765
 
3766
				#防止左手邊的最大數值
3767
				$result["content"][$conf["rangeF"][$i]]=$conf["rangeT"][count($conf["rangeT"])-1];
3768
 
3769
				}#if end
3770
 
3771
			}#for end
3772
 
3773
		#初始化執行正常
3774
		$result["status"]="true";
3775
 
3776
		#回傳結果
3777
		return $result;
3778
 
3779
		}#function key2value end
3780
 
3781
	/*
3782
	#函式說明: 
3783
	#數值對應的key
57 liveuser 3784
	#回傳結果:
1 liveuser 3785
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3786
	#$result["function"],當前執行的函數名稱.
3787
	#$result["error"],錯誤訊息陣列.
3788
	#$result["argu"],使用的參數.
3789
	#$result["content"],數值對應的左手邊數值.
3790
	#必填參數:
3791
	#$conf["value"],浮點數,要尋找對應的數值.
3792
	$conf["value"]=;
3793
	#$conf["reference"],整數陣列,透過math::key2value產生的對照表.
3794
	$conf["reference"]=array();
3795
	#可省略參數:
57 liveuser 3796
	#無.
201 liveuser 3797
	#參考資料:
3798
	#無.
57 liveuser 3799
	#備註:
3800
	#無.
1 liveuser 3801
	*/
3802
	public static function value2key($conf){
3803
 
3804
		#初始化要回傳的內容
3805
		$result=array();
3806
 
3807
		#記錄當前執行的函數名稱
3808
		$result["function"]=__FUNCTION__;
3809
 
3810
		#如果 $conf 不為陣列
3811
		if(gettype($conf)!="array"){
3812
 
3813
			#設置執行失敗
3814
			$result["status"]="false";
3815
 
3816
			#設置執行錯誤訊息
3817
			$result["error"][]="\$conf變數須為陣列形態";
3818
 
3819
			#如果傳入的參數為 null
3820
			if($conf==null){
3821
 
3822
				#設置執行錯誤訊息
3823
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3824
 
3825
				}#if end
3826
 
3827
			#回傳結果
3828
			return $result;
3829
 
3830
			}#if end
3831
 
3832
		#取得使用的參數
3833
		$result["argu"]=$conf;
3834
 
3835
		#檢查參數
3836
		#函式說明:
3837
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3838
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3839
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3840
		#$result["function"],當前執行的函式名稱.
3841
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3842
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3843
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3844
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3845
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3846
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3847
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3848
		#必填寫的參數:
3849
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3850
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3851
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3852
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("value","reference");
3853
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
3854
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("double","array");
3855
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3856
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3857
		#可以省略的參數:
3858
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3859
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3860
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3861
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("rangeT");
3862
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3863
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3864
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3865
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3866
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3867
		#$conf["arrayCountEqualCheck"][]=array();
3868
		#參考資料來源:
3869
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3870
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3871
		unset($conf["variableCheck::checkArguments"]);
3872
 
3873
		#如果檢查參數失敗
3874
		if($checkArguments["status"]=="false"){
3875
 
3876
			#設置執行失敗
3877
			$result["status"]="false";
3878
 
3879
			#設置執行錯誤訊息
3880
			$result["error"]=$checkArguments;
3881
 
3882
			#回傳結果
3883
			return $result;
3884
 
3885
			}#if end
3886
 
3887
		#如果檢查不通過
3888
		if($checkArguments["passed"]=="false"){
3889
 
3890
			#設置執行失敗
3891
			$result["status"]="false";
3892
 
3893
			#設置執行錯誤訊息
3894
			$result["error"]=$checkArguments;
3895
 
3896
			#回傳結果
3897
			return $result;
3898
 
3899
			}#if end
3900
 
3901
		#儲存最後發現小於 $value 的 key
3902
		$lastKey=0;
3903
 
3904
		#儲存最後發現小於 $value 的 valueInKey
3905
		$lastValue=0;
3906
 
3907
		#儲存最先發現大於 $value 的 key
3908
		$thisKey=0;
3909
 
3910
		#儲存最先發現大於 $value 的 valueInKey
3911
		$thisValue=0;
3912
 
3913
		#針對每個參照數值
3914
		foreach($conf["reference"] as $key=>$value){
3915
 
3916
		 	#如果要查的數值大於當前對應的 $key
3917
		 	if($conf["value"]>$value){
3918
 
3919
		 		#儲存最後發現小於 $value 的 key
3920
				$lastKey=$key;
3921
 
3922
				#儲存最後發現小於 $value 的 valueInKey
3923
				$lastValue=$value;
3924
 
3925
				#如果已經是最後一個數值了
3926
				if($key===count($conf["reference"])-1){
3927
 
3928
					#儲存最先發現大於 $value 的 key
3929
					$thisKey=$key;
3930
 
3931
					#儲存最先發現大於 $value 的 valueInKey
3932
					$thisValue=$value;
3933
 
3934
					}#if end	 	
3935
 
3936
		 		#繼續執行
3937
		 		continue;
3938
 
3939
		 		}#if end 	
3940
 
3941
		 	#反之
3942
		 	else{
3943
 
3944
		 		#儲存最先發現大於 $value 的 key
3945
				$thisKey=$key;
3946
 
3947
				#儲存最先發現大於 $value 的 valueInKey
3948
				$thisValue=$value;
3949
 
3950
		 		#跳出 foreach
3951
		 		break;
3952
 
3953
		 		}#else end	
3954
 
3955
		 	}#foreach end
3956
 
3957
		#取得要計算數值對於上個value的差距
3958
		$rangeLeft=$value-$lastValue;
3959
 
3960
		#取得要計算數值對於下個value的差距
3961
		$rangeRight=$thisValue-$value;
3962
 
3963
		#如果比較靠近上個數值
3964
		if($rangeLeft<$rangeRight){
3965
 
3966
			#設置結果為上個 key
3967
			$result["content"]=$lastKey;
3968
 
3969
			}#if end
3970
 
3971
		#反之	
3972
		else{
3973
			#設置結果為下個 key
3974
			$result["content"]=$thisKey;
3975
 
3976
			}#else end
3977
 
3978
		#設置執行正常
3979
		$result["status"]="true";
3980
 
3981
		#回傳結果
3982
		return $result;
3983
 
3984
		}#function value2key end
3985
 
3986
	/*
3987
	#函式說明:
3988
	#建立一對一的數值對照表,左右都對應到整數值.
57 liveuser 3989
	#回傳結果:
1 liveuser 3990
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3991
	#$result["function"],當前執行的函數名稱.
3992
	#$result["error"],錯誤訊息陣列.
3993
	#$result["argu"],使用的參數.
3994
	#$result["content"],由左至右的數值對應表
3995
	#必填參數
3996
	#$conf["rangeF"],整數陣列,要產生對應表的左手方範圍,$conf["rangeF"]["s"]為左手邊的起始範圍,$conf["rangeF"]["e"]為左手邊的結束範圍.
3997
	$conf["rangeF"]=array("s"=>0,"e"=>100);
3998
	#$conf["rangeT"],整數陣列,要產生對應表的右手方範圍,$conf["rangeT"]["s"]為右手邊的起始範圍,$conf["rangeT"]["e"]為右手邊的結束範圍.
3999
	$conf["rangeT"]=array('s'=>0,"e"=>255);
4000
	#可省略參數:
4001
	#無.
201 liveuser 4002
	#參考資料:
4003
	#無.
57 liveuser 4004
	#備註:
4005
	#無.
1 liveuser 4006
	*/
4007
	public static function fixedKeyToValueReversed(&$conf=array()){
4008
 
4009
		#初始化要回傳的內容
4010
		$result=array();
4011
 
4012
		#記錄當前執行的函數名稱
4013
		$result["function"]=__FUNCTION__;
4014
 
4015
		#如果 $conf 不為陣列
4016
		if(gettype($conf)!="array"){
4017
 
4018
			#設置執行失敗
4019
			$result["status"]="false";
4020
 
4021
			#設置執行錯誤訊息
4022
			$result["error"][]="\$conf變數須為陣列形態";
4023
 
4024
			#如果傳入的參數為 null
4025
			if($conf==null){
4026
 
4027
				#設置執行錯誤訊息
4028
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4029
 
4030
				}#if end
4031
 
4032
			#回傳結果
4033
			return $result;
4034
 
4035
			}#if end
4036
 
4037
		#取得使用的參數
4038
		$result["argu"]=$conf;
4039
 
4040
		#檢查參數
4041
		#函式說明:
4042
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4043
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4044
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4045
		#$result["function"],當前執行的函式名稱.
4046
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4047
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4048
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4049
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4050
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4051
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4052
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4053
		#必填寫的參數:
4054
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4055
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4056
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4057
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rangeF","rangeT");
4058
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4059
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
4060
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4061
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4062
		#可以省略的參數:
4063
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4064
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4065
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4066
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("rangeT");
4067
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4068
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
4069
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4070
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
4071
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4072
		#$conf["arrayCountEqualCheck"][]=array();
4073
		#參考資料來源:
4074
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4075
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4076
		unset($conf["variableCheck::checkArguments"]);
4077
 
4078
		#如果檢查參數失敗
4079
		if($checkArguments["status"]=="false"){
4080
 
4081
			#設置執行失敗
4082
			$result["status"]="false";
4083
 
4084
			#設置執行錯誤訊息
4085
			$result["error"]=$checkArguments;
4086
 
4087
			#回傳結果
4088
			return $result;
4089
 
4090
			}#if end
4091
 
4092
		#如果檢查不通過
4093
		if($checkArguments["passed"]=="false"){
4094
 
4095
			#設置執行失敗
4096
			$result["status"]="false";
4097
 
4098
			#設置執行錯誤訊息
4099
			$result["error"]=$checkArguments;
4100
 
4101
			#回傳結果
4102
			return $result;
4103
 
4104
			}#if end
4105
 
4106
		#檢查參數
4107
		if( !isset($conf["rangeF"]["s"]) || !isset($conf["rangeF"]["e"])){
4108
 
4109
			#不通過檢查,設定執行錯誤
4110
			$result["error"][]="參數 \$conf[\"rangeF\"][\"s\"] 與 \$conf[\"rangeF\"][\"s\"] 必填";
4111
 
4112
			#設置執行失敗
4113
			$result["status"]="error";
4114
 
4115
			#回傳結果
4116
			return $result;
4117
 
4118
			}#if end
4119
 
4120
		#檢查參數
4121
		if( !isset($conf["rangeT"]["s"]) || !isset($conf["rangeT"]["e"])){
4122
 
4123
			#不通過檢查,設定執行錯誤
4124
			$result["error"][]="參數 \$conf[\"rangeT\"][\"s\"] 與 \$conf[\"rangeT\"][\"s\"] 必填";
4125
 
4126
			#設置執行失敗
4127
			$result["status"]="error";
4128
 
4129
			#回傳結果
4130
			return $result;
4131
 
4132
			}#if end	
4133
 
4134
		#初始化儲存左方對照表
4135
		$rangeF=array();	
4136
 
4137
		#建立左方對照表
4138
		for($i=$conf["rangeF"]["s"];$i<=$conf["rangeF"]["e"];$i++){
4139
 
4140
			$rangeF[]=$i;
4141
 
4142
			}#for end
4143
 
4144
		#初始化儲存右方對照表
4145
		$rangeT=array();	
4146
 
4147
		#建立左方對照表
4148
		for($i=$conf["rangeT"]["s"];$i<=$conf["rangeT"]["e"];$i++){
4149
 
4150
			$rangeT[]=$i;
4151
 
4152
			}#for end
4153
 
4154
		#函式說明: 
4155
		#左方數值範圍要對應的右方數值範圍
57 liveuser 4156
		#回傳結果:
1 liveuser 4157
		#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4158
		#$result["function"],當前執行的函數名稱.
4159
		#$result["error"],錯誤訊息陣列.
4160
		#$result["argu"],使用的參數.
4161
		#必填參數:
4162
		#$conf["rangeF"],整數陣列,要產生對應表的左手方
4163
		$conf["math::key2value"]["rangeF"]=$rangeF;
4164
		#可省略參數:
4165
		#$conf["rangeT"],整數陣列,要產生對應表的右手方,預設為0到100的整數.
4166
		$conf["math::key2value"]["rangeT"]=$rangeT;
4167
		#備註:
4168
		#建構中.
4169
		$ftTable=math::key2value($conf["math::key2value"]);
4170
		unset($conf["math::key2value"]);
4171
 
4172
		#如果執行失敗
4173
		if($ftTable["status"]==="false")
4174
		{
4175
 
4176
			#設置執行失敗
4177
			$result["status"]="false";
4178
 
4179
			#設置執行錯誤訊息
4180
			$result["error"]=$ftTable;
4181
 
4182
			#回傳結果
4183
			return $result;
4184
 
4185
		}#if end
4186
 
4187
		#debug
4188
		#var_dump($ftTable);exit;
4189
 
4190
		#取得左方對應右方的對照表
4191
		$ftTable=$ftTable["content"];
4192
 
4193
		#函式說明: 
4194
		#左方數值範圍要對應的右方數值範圍
57 liveuser 4195
		#回傳結果:
1 liveuser 4196
		#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4197
		#$result["function"],當前執行的函數名稱.
4198
		#$result["error"],錯誤訊息陣列.
4199
		#$result["argu"],使用的參數.
4200
		#必填參數:
4201
		#$conf["rangeF"],整數陣列,要產生對應表的左手方
4202
		$conf["math::key2value"]["rangeF"]=$rangeT;
4203
		#可省略參數:
4204
		#$conf["rangeT"],整數陣列,要產生對應表的右手方,預設為0到100的整數.
4205
		$conf["math::key2value"]["rangeT"]=$rangeF;
4206
		#備註:
4207
		#建構中.
4208
		$tfTable=math::key2value($conf["math::key2value"]);
4209
		unset($conf["math::key2value"]);
4210
 
4211
		#如果執行失敗
4212
		if($tfTable["status"]==="false")
4213
		{
4214
 
4215
			#設置執行失敗
4216
			$result["status"]="false";
4217
 
4218
			#設置執行錯誤訊息
4219
			$result["error"]=$tfTable;
4220
 
4221
			#回傳結果
4222
			return $result;
4223
 
4224
		}#if end
4225
 
4226
		#取得左方對應右方的對照表
4227
		$tfTable=$tfTable["content"];
4228
 
4229
		#跑$conf["rangeF"]["e"]-$conf["rangeF"]["s"]+1次,修正轉換誤差.
4230
		for($i=$conf["rangeF"]["s"];$i<=$conf["rangeF"]["e"];$i++){
4231
 
4232
			#函式說明: 
4233
			#數值對應的key
57 liveuser 4234
			#回傳結果:
1 liveuser 4235
			#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4236
			#$result["function"],當前執行的函數名稱.
4237
			#$result["error"],錯誤訊息陣列.
4238
			#$result["argu"],使用的參數.
4239
			#必填參數:
4240
			#$conf["value"],浮點數,要尋找對應的數值.
4241
			$conf["math::value2key"]["value"]=(double)($i-$conf["rangeF"]["s"]);
4242
			#$conf["reference"],整數陣列,透過math::key2value產生的對照表.
4243
			$conf["math::value2key"]["reference"]=$tfTable;
4244
			#可省略參數:
4245
			#無
4246
			$value2key=math::value2key($conf["math::value2key"]);
4247
			unset($conf["math::value2key"]);
4248
 
4249
			#如果執行失敗
4250
			if($value2key["status"]==="false"){
4251
 
4252
				#印出結果
4253
				var_dump($value2key);
4254
 
4255
				#結束執行
4256
				exit;
4257
 
4258
				}#if end
4259
 
4260
			#var_dump($value2key);exit;
4261
 
4262
			#fix 轉換誤差
4263
			$ft[$i]=$value2key["content"];
4264
 
4265
			}#for end	
4266
 
4267
		#取得左右一對一的對照表
4268
		$result["content"]=$ft;
4269
 
4270
		#設置執行正常
4271
		$result["status"]="true";
4272
 
4273
		#回傳結果
4274
		return $result;
4275
 
4276
		}#function fixedKeyToValueReversed end	
4277
 
4278
	/*
4279
	#函式說明:get Euler's number
4280
	#回傳結果:
4281
	#$result["status"],執行正常("true")與否("false").
4282
	#$result["content"],回傳數學常數(e).
4283
	#$reuslt["argu"],使用的參數.
4284
	#必填參數:
57 liveuser 4285
	#無.
1 liveuser 4286
	#可省略參數:
4287
	#$conf["pow"],整數字串,次方,預設為1,代表e的1次方.
4288
	#$conf["pow"]="1";
4289
	#參考資料:
4290
	#https://www.runoob.com/php/func-math-exp.html
4291
	#https://en.wikipedia.org/wiki/E_(mathematical_constant)
57 liveuser 4292
	#備註:
4293
	#無.
1 liveuser 4294
	*/
4295
	public static function getExp(&$conf=array()){
4296
 
4297
		#初始化要回傳的結果
4298
		$result=array();
4299
 
4300
		#取得當前執行的函數名稱
4301
		$result["function"]=__FUNCTION__;
4302
 
4303
		#取得參數
4304
		$result["argu"]=$conf;
4305
 
4306
		#如果 $conf 不為陣列
4307
		if(gettype($conf)!="array"){
4308
 
4309
			#設置執行失敗
4310
			$result["status"]="false";
4311
 
4312
			#設置執行錯誤訊息
4313
			$result["error"][]="\$conf變數須為陣列形態";
4314
 
4315
			#如果傳入的參數為 null
4316
			if(is_null($conf)){
4317
 
4318
				#設置執行錯誤訊息
4319
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4320
 
4321
				}#if end
4322
 
4323
			#回傳結果
4324
			return $result;
4325
 
4326
			}#if end
4327
 
4328
		#函式說明:
4329
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4330
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4331
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4332
		#$result["function"],當前執行的函式名稱.
4333
		#$result["argu"],設置給予的參數.
4334
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4335
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4336
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4337
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4338
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4339
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4340
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4341
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4342
		#必填寫的參數:
4343
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4344
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4345
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4346
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4347
		#可以省略的參數:
4348
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4349
		#$conf["mustBeFilledVariableName"]=array();
4350
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4351
		#$conf["mustBeFilledVariableType"]=array();
4352
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4353
		#$conf["canBeEmptyString"]="false";
4354
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
4355
		#$conf["canNotBeEmpty"]=array();
4356
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
4357
		#$conf["canBeEmpty"]=array();
4358
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4359
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("pow");
4360
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4361
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pow");
4362
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4363
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("pow");
4364
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4365
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1");
4366
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4367
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4368
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
4369
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
4370
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4371
		#$conf["arrayCountEqualCheck"][]=array();
4372
		#參考資料來源:
4373
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4374
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4375
		unset($conf["variableCheck::checkArguments"]);
4376
 
4377
		#如果檢查參數失敗
4378
		if($checkArguments["status"]==="false"){
4379
 
4380
			#設置執行失敗
4381
			$result["status"]="false";
4382
 
4383
			#設置執行錯誤
4384
			$result["error"]=$checkArguments;
4385
 
4386
			#回傳結果
4387
			return $result;
4388
 
4389
			}#if end
4390
 
4391
		#如果檢查參數不通過
4392
		if($checkArguments["passed"]==="false"){
4393
 
4394
			#設置執行失敗
4395
			$result["status"]="false";
4396
 
4397
			#設置執行錯誤
4398
			$result["error"]=$checkArguments;
4399
 
4400
			#回傳結果
4401
			return $result;
4402
 
4403
			}#if end
4404
 
4405
		#設置要回傳的內容為常數 e 的 $conf["pow"] 次方
4406
		$result["content"]=exp($conf["pow"]);
4407
 
4408
		#設置執行正確
4409
		$result["status"]="true";
4410
 
4411
		#回傳結果
4412
		return $result;
4413
 
4414
		}#function getExp end
4415
 
4416
	/*
4417
	#函式說明:
4418
	#將16進位的16位數,轉換為小數點後到7位的gp表示方法.
4419
	#回傳結果:
4420
	#$result["status"],執行正常("true")與否("false").
4421
	#$result["content"],回傳GPS或16進位的16位數GPS.
4422
	#$reuslt["argu"],使用的參數.
4423
	#必填參數:
4424
	#$conf["rawGps"],字串,16進位的16位數,亦即gps的格式.
4425
	$conf["rawGps"]="";
4426
	#可省略參數:
4427
	#$conf["reverse"],預設為"false","true"代表要將經緯度(121.1234567,23.1234567)轉換為16進位的16位數字.
4428
	#$conf["reverse"]="true";
201 liveuser 4429
	#參考資料:
1 liveuser 4430
	#無.
57 liveuser 4431
	#備註:
4432
	#無.
1 liveuser 4433
	*/	
4434
	public static function raw2gps(&$conf=array()){
4435
 
4436
		#初始化要回傳的結果
4437
		$result=array();
4438
 
4439
		#取得當前執行的函數名稱
4440
		$result["function"]=__FUNCTION__;
4441
 
4442
		#如果沒有參數
4443
		if(func_num_args()==0){
4444
 
4445
			#設置執行失敗
4446
			$result["status"]="false";
4447
 
4448
			#設置執行錯誤訊息
4449
			$result["error"]="函數".$result["function"]."需要參數";
4450
 
4451
			#回傳結果
4452
			return $result;
4453
 
4454
			}#if end
4455
 
4456
		#取得參數
4457
		$result["argu"]=$conf;
4458
 
4459
		#如果 $conf 不為陣列
4460
		if(gettype($conf)!=="array"){
4461
 
4462
			#設置執行失敗
4463
			$result["status"]="false";
4464
 
4465
			#設置執行錯誤訊息
4466
			$result["error"][]="\$conf變數須為陣列形態";
4467
 
4468
			#如果傳入的參數為 null
4469
			if(is_null($conf)){
4470
 
4471
				#設置執行錯誤訊息
4472
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4473
 
4474
				}#if end
4475
 
4476
			#回傳結果
4477
			return $result;
4478
 
4479
			}#if end
4480
 
4481
		#函式說明:
4482
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4483
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4484
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4485
		#$result["function"],當前執行的函式名稱.
4486
		#$result["argu"],設置給予的參數.
4487
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4488
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4489
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4490
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4491
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4492
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4493
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4494
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4495
		#必填寫的參數:
4496
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4497
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4498
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4499
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4500
		#可以省略的參數:
4501
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4502
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawGps");
4503
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4504
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4505
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4506
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4507
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
4508
		#$conf["canNotBeEmpty"]=array();
4509
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
4510
		#$conf["canBeEmpty"]=array();
4511
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4512
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("reverse");
4513
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4514
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("reverse");
4515
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4516
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4517
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4518
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4519
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4520
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4521
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
4522
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
4523
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4524
		#$conf["arrayCountEqualCheck"][]=array();
4525
		#參考資料來源:
4526
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4527
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4528
		unset($conf["variableCheck::checkArguments"]);
4529
 
4530
		#如果檢查參數失敗
4531
		if($checkArguments["status"]==="false"){
4532
 
4533
			#設置執行失敗
4534
			$result["status"]="false";
4535
 
4536
			#設置執行錯誤
4537
			$result["error"]=$checkArguments;
4538
 
4539
			#回傳結果
4540
			return $result;
4541
 
4542
			}#if end
4543
 
4544
		#如果檢查參數不通過
4545
		if($checkArguments["passed"]==="false"){
4546
 
4547
			#設置執行失敗
4548
			$result["status"]="false";
4549
 
4550
			#設置執行錯誤
4551
			$result["error"]=$checkArguments;
4552
 
4553
			#回傳結果
4554
			return $result;
4555
 
4556
			}#if end
4557
 
4558
		#如果要把經緯度變成16進位的16位數字
4559
		if($conf["reverse"]==="true"){
4560
 
57 liveuser 4561
			#函式說明:
1 liveuser 4562
			#將固定格式的字串分開,並回傳分開的結果。
4563
			#回傳結果:
4564
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4565
			#$result["error"],錯誤訊息陣列
4566
			#$result["function"],當前執行的函數名稱.
4567
			#$result["argu"],使用的參數.
4568
			#$result["oriStr"],要分割的原始字串內容
4569
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4570
			#$result["dataCounts"],爲總共分成幾段
4571
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
57 liveuser 4572
			#必填參數:
1 liveuser 4573
			#$conf["stringIn"],字串,要處理的字串.
4574
			$conf["stringProcess::spiltString"]["stringIn"]=$conf["rawGps"];
4575
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4576
			$conf["stringProcess::spiltString"]["spiltSymbol"]=",";
4577
			#可省略參數:
4578
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4579
			$conf["allowEmptyStr"]="false";
4580
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4581
			unset($conf["stringProcess::spiltString"]);
4582
 
4583
			#如果分割gps字串失敗
4584
			if($spiltString["status"]==="false"){
4585
 
4586
				#設置執行失敗
4587
				$result["status"]="false";
4588
 
4589
				#設置執行錯誤
4590
				$result["error"]=$spiltString;
4591
 
4592
				#回傳結果
4593
				return $result;
4594
 
4595
				}#if end
4596
 
4597
			#如果分割gps字串時,沒有發現逗號.
4598
			if($spiltString["found"]==="false"){
4599
 
4600
				#設置執行失敗
4601
				$result["status"]="false";
4602
 
4603
				#設置執行錯誤
4604
				$result["error"]=$spiltString;
4605
 
4606
				#回傳結果
4607
				return $result;
4608
 
4609
				}#if end
4610
 
4611
			#如果分割成不等於2段
4612
			if($spiltString["dataCounts"]!==2){
4613
 
4614
				#設置執行失敗
4615
				$result["status"]="false";
4616
 
4617
				#設置執行錯誤
4618
				$result["error"]=$spiltString;
4619
 
4620
				#設置錯誤訊息
4621
				$result["error"][]="應該要分割出經度跟緯度";
4622
 
4623
				#回傳結果
4624
				return $result;
4625
 
4626
				}#if end
4627
 
4628
			#取得緯度
4629
			$lat=$spiltString["dataArray"][0];
4630
 
4631
			#取得經度
4632
			$lon=$spiltString["dataArray"][1];
4633
 
4634
			#檢查經度格式 - start 
4635
 
4636
			#初始化經度檢查未通過
4637
			$lonOk=false;
4638
 
4639
			#函式說明:
4640
			#將字串特定關鍵字與其前面的內容剔除
4641
			#回傳結果:
4642
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4643
			#$result["error"],錯誤訊息陣列.
4644
			#$result["warning"],警告訊息鎮列.
4645
			#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
4646
			#$result["function"],當前執行的函數名稱.
4647
			#$result["oriStr"],要處理的原始字串內容.
4648
			#$result["content"],處理好的的字串內容.	
57 liveuser 4649
			#必填參數:
1 liveuser 4650
			$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$lon;#要處理的字串.
4651
			$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";#特定字串.
4652
			$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
4653
			unset($conf["stringProcess::delStrBeforeKeyWord"]);
4654
 
4655
			#如果分割經度字串失敗
4656
			if($delStrBeforeKeyWord["status"]==="false"){
4657
 
4658
				#設置執行失敗
4659
				$result["status"]="false";
4660
 
4661
				#設置執行錯誤
4662
				$result["error"]=$delStrBeforeKeyWord;
4663
 
4664
				#回傳結果
4665
				return $result;
4666
 
4667
				}#if end
4668
 
4669
			#如果分割經度字串時,沒有發現dot.
4670
			if($delStrBeforeKeyWord["founded"]==="false"){
4671
 
4672
				#設置執行失敗
4673
				$result["status"]="false";
4674
 
4675
				#設置執行錯誤
4676
				$result["error"]=$delStrBeforeKeyWord;
4677
 
4678
				#回傳結果
4679
				return $result;
4680
 
4681
				}#if end
4682
 
4683
			#如果沒有小數點後七位
4684
			if(strlen($delStrBeforeKeyWord["content"])!==7){
4685
 
4686
				#設置執行失敗
4687
				$result["status"]="false";
4688
 
4689
				#設置執行錯誤
4690
				$result["error"]=$delStrBeforeKeyWord;
4691
 
4692
				#設置執行錯誤
4693
				$result["error"][]="經度應該要包含小數點後7位.";
4694
 
4695
				#回傳結果
4696
				return $result;
4697
 
4698
				}#if end
4699
 
4700
			#如果是西經
4701
			if($lon<0){
4702
 
4703
				#轉正數加180
4704
				$lon=(-1)*$lon+180;
4705
 
4706
				}#if end	
4707
 
4708
			#如果經度超過範圍
4709
			if($lon>360){
4710
 
4711
				#設置執行失敗
4712
				$result["status"]="false";				
4713
 
4714
				#設置執行錯誤
4715
				$result["error"][]="經度不會大於180度";
4716
 
4717
				#回傳結果
4718
				return $result;
4719
 
4720
				}#if end
4721
 
4722
			#檢查經度格式 - end
4723
 
4724
			#檢查緯度格式 - start 
4725
 
4726
			#初始化經度檢查未通過
4727
			$lonOk=false;
4728
 
4729
			#函式說明:
4730
			#將字串特定關鍵字與其前面的內容剔除
4731
			#回傳結果:
4732
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4733
			#$result["error"],錯誤訊息陣列.
4734
			#$result["warning"],警告訊息鎮列.
4735
			#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
4736
			#$result["function"],當前執行的函數名稱.
4737
			#$result["oriStr"],要處理的原始字串內容.
4738
			#$result["content"],處理好的的字串內容.	
57 liveuser 4739
			#必填參數:
1 liveuser 4740
			$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$lat;#要處理的字串.
4741
			$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";#特定字串.
4742
			$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
4743
			unset($conf["stringProcess::delStrBeforeKeyWord"]);
4744
 
4745
			#如果分割緯度字串失敗
4746
			if($delStrBeforeKeyWord["status"]==="false"){
4747
 
4748
				#設置執行失敗
4749
				$result["status"]="false";
4750
 
4751
				#設置執行錯誤
4752
				$result["error"]=$delStrBeforeKeyWord;
4753
 
4754
				#回傳結果
4755
				return $result;
4756
 
4757
				}#if end
4758
 
4759
			#如果分割緯度字串時,沒有發現dot.
4760
			if($delStrBeforeKeyWord["founded"]==="false"){
4761
 
4762
				#設置執行失敗
4763
				$result["status"]="false";
4764
 
4765
				#設置執行錯誤
4766
				$result["error"]=$delStrBeforeKeyWord;
4767
 
4768
				#回傳結果
4769
				return $result;
4770
 
4771
				}#if end
4772
 
4773
			#如果沒有小數點後七位
4774
			if(strlen($delStrBeforeKeyWord["content"])!==7){
4775
 
4776
				#設置執行失敗
4777
				$result["status"]="false";
4778
 
4779
				#設置執行錯誤
4780
				$result["error"]=$delStrBeforeKeyWord;
4781
 
4782
				#設置執行錯誤
4783
				$result["error"][]="緯度應該要包含小數點後7位.";
4784
 
4785
				#回傳結果
4786
				return $result;
4787
 
4788
				}#if end
4789
 
4790
			#如果是南緯
4791
			if($lat<0){
4792
 
4793
				#轉正數加180
4794
				$lat=(-1)*$lat+90;
4795
 
4796
				}#if end	
4797
 
4798
			#如果緯度超過範圍
4799
			if($lat>180){
4800
 
4801
				#設置執行失敗
4802
				$result["status"]="false";				
4803
 
4804
				#設置執行錯誤
4805
				$result["error"][]="緯度不會大於90度";
4806
 
4807
				#回傳結果
4808
				return $result;
4809
 
4810
				}#if end
4811
 
4812
			#檢查緯度格式 - end
4813
 
4814
			#取得16進位的緯度
4815
			$lat=sprintf("%08s",strtoupper(base_convert($lat*pow(10,7),10,16)));
4816
 
4817
			#取得16進位的經度
4818
			$lon=sprintf("%08s",strtoupper(base_convert($lon*pow(10,7),10,16)));
4819
 
4820
			#設置要回傳的16進位16位數字的經緯度
4821
			$result["content"]=$lat.$lon;
4822
 
4823
			#設置執行正常
4824
			$result["status"]="true";
4825
 
4826
			#回傳結果
4827
			return $result;
4828
 
4829
		}#if end
4830
 
4831
		#取得16進位緯度
4832
		$lat=substr($conf["rawGps"],0,8);
4833
 
4834
		#取得16進位經度
4835
		$lon=substr($conf["rawGps"],8,8);
4836
 
4837
		#取得10進位的經度
4838
		$lon=base_convert($lon,16,10);
4839
 
4840
		#取得10進位的緯度
4841
		$lat=base_convert($lat,16,10);
4842
 
4843
		#如果經度超過範圍
4844
		if($lon>2*180*pow(10,7))
4845
		{
4846
			#設置錯誤訊息
4847
			$result["error"][]="經度超過範圍";
4848
 
4849
			#設置錯誤
4850
			$result["status"]="false";
4851
 
4852
			#回傳結果
4853
			return $result;
4854
 
4855
		}#if end
4856
 
4857
		#如果緯度超過範圍
4858
		if($lat>2*90*pow(10,7))
4859
		{
4860
			#設置錯誤訊息
4861
			$result["error"][]="緯度超過範圍";
4862
 
4863
			#設置錯誤
4864
			$result["status"]="false";
4865
 
4866
			#回傳結果
4867
			return $result;
4868
 
4869
		}#if end
4870
 
4871
		#如果是西經
4872
		if($lon>180*pow(10,7))
4873
		{
4874
			$lon=-($lon-180*pow(10,7));
4875
 
4876
		}#if end
4877
 
4878
		#如果是南緯
4879
		if($lat>90*pow(10,7))
4880
		{
4881
			$lat=-($lat-90*pow(10,7));
4882
 
4883
		}#if end
4884
 
4885
		#設置要回傳的結果
4886
		$result["content"]=$lat*pow(10,-7).",".$lon*pow(10,-7);
4887
 
4888
		#設置執行正常
4889
		$result["status"]="true";
4890
 
4891
		#回傳結果
4892
		return $result;
4893
 
4894
		}#function raw2gps
4895
 
4896
	}#class math end
4897
 
4898
?>