Subversion Repositories php-qbpwcf

Rev

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

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
239 liveuser 6
    Copyright (C) 2014~2026 MIN ZHI, CHEN
3 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
 
26
/*
27
類別說明:
28
跟數學計算有關的類別.
29
備註:
30
無.
31
*/
32
class math{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#可省略參數:
45
	#無.
46
	#參考資料:
47
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
48
	#備註:
49
	#無.
50
	*/
51
	public function __call($method,$arguments){
226 liveuser 52
 
3 liveuser 53
		#取得當前執行的函式
54
		$result["function"]=__FUNCTION__;
226 liveuser 55
 
3 liveuser 56
		#設置執行不正常
57
		$result["status"]="false";
226 liveuser 58
 
3 liveuser 59
		#設置執行錯誤
60
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
226 liveuser 61
 
3 liveuser 62
		#設置所丟入的參數
63
		$result["error"][]=$arguments;
226 liveuser 64
 
3 liveuser 65
		#回傳結果
66
		return $result;
226 liveuser 67
 
3 liveuser 68
		}#function __call end
226 liveuser 69
 
3 liveuser 70
	/*
71
	#函式說明:
72
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
73
	#回傳結果:
74
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
75
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
76
	#$result["function"],當前執行的函式名稱.
77
	#必填參數:
78
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
79
	#$arguments,陣列,為呼叫方法時所用的參數.
80
	#可省略參數:
81
	#無.
82
	#參考資料:
83
	#__callStatic=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
84
	#備註:
85
	#無.
86
	*/
87
	public static function __callStatic($method,$arguments){
226 liveuser 88
 
3 liveuser 89
		#取得當前執行的函式
90
		$result["function"]=__FUNCTION__;
226 liveuser 91
 
3 liveuser 92
		#設置執行不正常
93
		$result["status"]="false";
226 liveuser 94
 
3 liveuser 95
		#設置執行錯誤
96
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
226 liveuser 97
 
3 liveuser 98
		#設置所丟入的參數
99
		$result["error"][]=$arguments;
226 liveuser 100
 
3 liveuser 101
		#回傳結果
102
		return $result;
226 liveuser 103
 
3 liveuser 104
		}#function __callStatic end
226 liveuser 105
 
3 liveuser 106
	/*
107
	#函式說明:
108
	#計算總和.
109
	#回傳結果:
110
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
111
	#$result["error"],錯誤訊息陣列.
112
	#$result["function"],當前執行的函數名稱.
113
	#$result["content"],總和.
114
	#必填參數:
115
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列
116
	#可省略參數:
117
	#無.
118
	#參考資料:
119
	#array-sum=>http://php.net/manual/en/function.array-sum.ph
120
	#備註:
121
	#無.
122
	*/
123
	public static function computeSum(&$conf){
124
 
125
		#初始化要回傳的內容
126
		$result=array();
226 liveuser 127
 
3 liveuser 128
		#記錄當前執行的函數名稱
129
		$result["function"]=__FUNCTION__;
130
 
131
		#如果 $conf 不為陣列
132
		if(gettype($conf)!="array"){
226 liveuser 133
 
3 liveuser 134
			#設置執行失敗
135
			$result["status"]="false";
226 liveuser 136
 
3 liveuser 137
			#設置執行錯誤訊息
138
			$result["error"][]="\$conf變數須為陣列形態";
139
 
140
			#如果傳入的參數為 null
141
			if($conf==null){
226 liveuser 142
 
3 liveuser 143
				#設置執行錯誤訊息
144
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 145
 
3 liveuser 146
				}#if end
147
 
148
			#回傳結果
149
			return $result;
226 liveuser 150
 
3 liveuser 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");
226 liveuser 171
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 180
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 193
 
3 liveuser 194
			#設置執行失敗
195
			$result["status"]="false";
226 liveuser 196
 
3 liveuser 197
			#設置執行錯誤訊息
198
			$result["error"]=$checkArguments;
199
 
200
			#回傳結果
201
			return $result;
226 liveuser 202
 
3 liveuser 203
			}#if end
226 liveuser 204
 
3 liveuser 205
		#如果檢查不通過
206
		if($checkArguments["passed"]=="false"){
226 liveuser 207
 
3 liveuser 208
			#設置執行失敗
209
			$result["status"]="false";
226 liveuser 210
 
3 liveuser 211
			#設置執行錯誤訊息
212
			$result["error"]=$checkArguments;
213
 
214
			#回傳結果
215
			return $result;
226 liveuser 216
 
3 liveuser 217
			}#if end
218
 
219
		#加總陣列中的數字
220
		$sum=array_sum($conf["rawDataArray"]);
221
 
222
		#如果加總失敗
223
		if($sum==false){
226 liveuser 224
 
3 liveuser 225
			#設置執行失敗
226
			$result["status"]="false";
226 liveuser 227
 
3 liveuser 228
			#設置執行錯誤訊息
229
			$result["error"][]="加總失敗";
230
 
231
			#回傳結果
232
			return $result;
226 liveuser 233
 
3 liveuser 234
			}#if end
226 liveuser 235
 
236
		#反之加總成功
3 liveuser 237
		else{
226 liveuser 238
 
3 liveuser 239
			#取得總和
240
			$result["content"]=$sum;
226 liveuser 241
 
3 liveuser 242
			}#else end
243
 
244
		#設置執行正常
245
		$result["status"]="true";
246
 
247
		#回傳總和
248
		return $result;
226 liveuser 249
 
3 liveuser 250
		}#function computeSum end
251
 
252
	/*
253
	#函式說明:
254
	#計算平均數.
255
	#回傳結果:
256
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
257
	#$result["error"],錯誤訊息陣列.
258
	#$result["function"],當前執行的函數名稱.
259
	#$result["content"],平均數.
260
	#必填參數:
261
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列
262
	#可省略參數:
263
	#無.
264
	#參考資料:
265
	#無.
266
	#備註:
267
	#無.
268
	*/
269
	public static function computeMean(&$conf){
270
 
271
		#初始化要回傳的內容
272
		$result=array();
226 liveuser 273
 
3 liveuser 274
		#記錄當前執行的函數名稱
275
		$result["function"]=__FUNCTION__;
276
 
277
		#如果 $conf 不為陣列
278
		if(gettype($conf)!="array"){
226 liveuser 279
 
3 liveuser 280
			#設置執行失敗
281
			$result["status"]="false";
226 liveuser 282
 
3 liveuser 283
			#設置執行錯誤訊息
284
			$result["error"][]="\$conf變數須為陣列形態";
285
 
286
			#如果傳入的參數為 null
287
			if($conf==null){
226 liveuser 288
 
3 liveuser 289
				#設置執行錯誤訊息
290
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 291
 
3 liveuser 292
				}#if end
226 liveuser 293
 
3 liveuser 294
			#回傳結果
295
			return $result;
226 liveuser 296
 
3 liveuser 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");
226 liveuser 317
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 326
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 339
 
3 liveuser 340
			#設置執行失敗
341
			$result["status"]="false";
226 liveuser 342
 
3 liveuser 343
			#設置執行錯誤訊息
344
			$result["error"]=$checkArguments;
345
 
346
			#回傳結果
347
			return $result;
226 liveuser 348
 
3 liveuser 349
			}#if end
226 liveuser 350
 
3 liveuser 351
		#如果檢查不通過
352
		if($checkArguments["passed"]=="false"){
226 liveuser 353
 
3 liveuser 354
			#設置執行失敗
355
			$result["status"]="false";
226 liveuser 356
 
3 liveuser 357
			#設置執行錯誤訊息
358
			$result["error"]=$checkArguments;
359
 
360
			#回傳結果
361
			return $result;
226 liveuser 362
 
3 liveuser 363
			}#if end
364
 
365
		#取得原始資料的筆數
366
		$rawDataCount=count($conf["rawDataArray"]);
367
 
368
		#計算總合
369
		#函式說明:
370
		#計算總和.
371
		#回傳結果:
372
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
373
		#$result["error"],錯誤訊息陣列.
374
		#$result["function"],當前執行的函數名稱.
375
		#$result["content"],總和.
376
		#必填參數:
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"){
226 liveuser 385
 
3 liveuser 386
			#設置執行失敗
387
			$result["status"]="false";
226 liveuser 388
 
3 liveuser 389
			#設置執行錯誤訊息
390
			$result["error"]=$computeSum;
391
 
392
			#回傳結果
393
			return $result;
226 liveuser 394
 
3 liveuser 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
	/*
409
	#函式說明:
410
	#計算標準差,結果會回傳標準差.
411
	#回傳結果:
412
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
413
	#$result["error"],錯誤訊息陣列.
414
	#$result["function"],當前執行的函數名稱.
415
	#$result["content"],標準差.
416
	#必填參數:
417
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列.
418
	#可省略參數:
419
	#無.
420
	#參考資料:
421
	#無.
422
	#備註:
423
	#無.
424
	*/
425
	public static function computeStandardDeviation(&$conf){
426
 
427
		#初始化要回傳的內容
428
		$result=array();
226 liveuser 429
 
3 liveuser 430
		#記錄當前執行的函數名稱
431
		$result["function"]=__FUNCTION__;
432
 
433
		#如果 $conf 不為陣列
434
		if(gettype($conf)!="array"){
226 liveuser 435
 
3 liveuser 436
			#設置執行失敗
437
			$result["status"]="false";
226 liveuser 438
 
3 liveuser 439
			#設置執行錯誤訊息
440
			$result["error"][]="\$conf變數須為陣列形態";
441
 
442
			#如果傳入的參數為 null
443
			if($conf==null){
226 liveuser 444
 
3 liveuser 445
				#設置執行錯誤訊息
446
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 447
 
3 liveuser 448
				}#if end
449
 
450
			#回傳結果
451
			return $result;
226 liveuser 452
 
3 liveuser 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");
226 liveuser 473
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 482
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 495
 
3 liveuser 496
			#設置執行失敗
497
			$result["status"]="false";
226 liveuser 498
 
3 liveuser 499
			#設置執行錯誤訊息
500
			$result["error"]=$checkArguments;
501
 
502
			#回傳結果
503
			return $result;
226 liveuser 504
 
3 liveuser 505
			}#if end
226 liveuser 506
 
3 liveuser 507
		#如果檢查不通過
508
		if($checkArguments["passed"]=="false"){
226 liveuser 509
 
3 liveuser 510
			#設置執行失敗
511
			$result["status"]="false";
226 liveuser 512
 
3 liveuser 513
			#設置執行錯誤訊息
514
			$result["error"]=$checkArguments;
515
 
516
			#回傳結果
517
			return $result;
226 liveuser 518
 
3 liveuser 519
			}#if end
520
 
521
		#取得原始資料的筆數
522
		$rawDataCounts=count($conf["rawDataArray"]);
523
 
524
		#取得平均數
525
		#函式說明:
526
		#計算平均數,結果會回傳一數值。
527
		#必填參數:
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"){
226 liveuser 534
 
3 liveuser 535
			#設置執行失敗
536
			$result["status"]="false";
226 liveuser 537
 
3 liveuser 538
			#設置執行錯誤訊息
539
			$result["error"]=$mean;
540
 
541
			#回傳結果
542
			return $result;
226 liveuser 543
 
3 liveuser 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
	/*
577
	#函式說明:
578
	#排列一組數字
579
	#回傳結果:
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"],過排序後依照遞增或遞減順序排列的數字陣列.
587
	#必填參數:
588
	$conf["rawDataArray"]=array();#要排序的數字陣列
589
	#可省略參數:
590
	#$conf["asc"]="true";#如果爲"true"則排序順變爲從小到大,若為"false"則為從大到小,預設為"false".
591
	#參考資料:
592
	#無.
593
	#備註:
594
	#無.
595
	*/
596
	public static function arrangeNum(&$conf){
226 liveuser 597
 
3 liveuser 598
		#初始化要回傳的內容
599
		$result=array();
226 liveuser 600
 
3 liveuser 601
		#記錄當前執行的函數名稱
602
		$result["function"]=__FUNCTION__;
603
 
604
		#如果 $conf 不為陣列
605
		if(gettype($conf)!="array"){
226 liveuser 606
 
3 liveuser 607
			#設置執行失敗
608
			$result["status"]="false";
226 liveuser 609
 
3 liveuser 610
			#設置執行錯誤訊息
611
			$result["error"][]="\$conf變數須為陣列形態";
612
 
613
			#如果傳入的參數為 null
614
			if($conf==null){
226 liveuser 615
 
3 liveuser 616
				#設置執行錯誤訊息
617
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 618
 
3 liveuser 619
				}#if end
620
 
621
			#回傳結果
622
			return $result;
226 liveuser 623
 
3 liveuser 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");
226 liveuser 644
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 653
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 666
 
3 liveuser 667
			#設置執行失敗
668
			$result["status"]="false";
226 liveuser 669
 
3 liveuser 670
			#設置執行錯誤訊息
671
			$result["error"]=$checkArguments;
672
 
673
			#回傳結果
674
			return $result;
226 liveuser 675
 
3 liveuser 676
			}#if end
226 liveuser 677
 
3 liveuser 678
		#如果檢查不通過
679
		if($checkArguments["passed"]=="false"){
226 liveuser 680
 
3 liveuser 681
			#設置執行失敗
682
			$result["status"]="false";
226 liveuser 683
 
3 liveuser 684
			#設置執行錯誤訊息
685
			$result["error"]=$checkArguments;
686
 
687
			#回傳結果
688
			return $result;
226 liveuser 689
 
3 liveuser 690
			}#if end
226 liveuser 691
 
3 liveuser 692
		#用來儲存排列後順序的陣列
693
		$result["content"]=array();
226 liveuser 694
 
3 liveuser 695
		#用來計算的暫存陣列
696
		$inputTempArray=$conf["rawDataArray"];
226 liveuser 697
 
3 liveuser 698
		#初始化計數
699
		$count=0;
226 liveuser 700
 
3 liveuser 701
		#當 $inputTempArray 有元素就執行
702
		while(count($inputTempArray)>0){
226 liveuser 703
 
3 liveuser 704
			#函式說明:
705
			#找最大值,結果會回傳最大值.
706
			#回傳結果:
707
			#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
708
			#$result["error"],錯誤訊息陣列.
709
			#$result["function"],當前執行的函數名稱.
710
			#$result["key"],最大值原先的key.
711
			#$result["value"],最大值的數字.
712
			#必填參數:
713
			$conf["math::getMaxValue"]["rawDataArray"]=$inputTempArray;#爲原始數據
714
			$getMaxValue=math::getMaxValue($conf["math::getMaxValue"]);
715
			unset($conf["math::getMaxValue"]);
226 liveuser 716
 
3 liveuser 717
			#如果尋找最大值失敗
718
			if($getMaxValue["status"]=="false"){
226 liveuser 719
 
3 liveuser 720
				#設置執行失敗
721
				$result["status"]="false";
226 liveuser 722
 
3 liveuser 723
				#設置執行錯誤訊息
724
				$result["error"]=$getMaxValue;
725
 
726
				#回傳結果
727
				return $result;
226 liveuser 728
 
3 liveuser 729
				}#if end
226 liveuser 730
 
3 liveuser 731
			#函式說明:
732
			#將陣列中特定元素剔除,並重新按照順序排序
733
			#回傳結果:
734
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
735
			#$result["error"],錯誤訊息
736
			#$result["function"],當前執行的函數
737
			#$result["content"]["byName"],剔除掉特定元素的陣列,使用原來陣列的key來儲存.
738
			#$result["content"]["byNumber"],剔除掉特定元素的陣列,使用從0開始的整數key來儲存.
739
			#必填參數:
740
			$conf["arrays::eraseElement"]["rawInputArray"]=$inputTempArray;#要處理的原始數字陣列
226 liveuser 741
			$conf["arrays::eraseElement"]["eraseElementKey"]=(string)$getMaxValue["key"];#要移除的元素key值
3 liveuser 742
			$eraseElement=arrays::eraseElement($conf["arrays::eraseElement"]);
743
			unset($conf["arrays::eraseElement"]);
226 liveuser 744
 
3 liveuser 745
			#如果移除最大值元素失敗
746
			if($eraseElement["status"]=="false"){
226 liveuser 747
 
3 liveuser 748
				#設置執行失敗
749
				$result["status"]="false";
226 liveuser 750
 
3 liveuser 751
				#設置執行錯誤訊息
752
				$result["error"]=$eraseElement;
753
 
754
				#回傳結果
755
				return $result;
226 liveuser 756
 
3 liveuser 757
				}#if end
226 liveuser 758
 
759
			#如果移除元素過後不為空陣列
3 liveuser 760
			if($eraseElement["empty"]=="false"){
226 liveuser 761
 
3 liveuser 762
				#置換成移除掉最大數元素後的陣列
763
				$inputTempArray=$eraseElement["content"]["byName"];
226 liveuser 764
 
765
				}#if end
766
 
3 liveuser 767
			#反之
768
			else{
226 liveuser 769
 
3 liveuser 770
				#設成空陣列
771
				$inputTempArray=array();
226 liveuser 772
 
3 liveuser 773
				}#else end
226 liveuser 774
 
3 liveuser 775
			#依據順位儲存最大的數字元素
776
			$result["value"][$count]=$getMaxValue["value"];
777
			$result["key"][$count]=$getMaxValue["key"];
778
			$result["content"][$count]=$getMaxValue["value"];
226 liveuser 779
 
3 liveuser 780
			#計數加一
781
			$count++;
226 liveuser 782
 
3 liveuser 783
			}#while end
226 liveuser 784
 
3 liveuser 785
		#如果$conf["asc"]爲"true"
786
		if($conf["asc"]=="true"){
226 liveuser 787
 
3 liveuser 788
			#函式說明:
789
			#將陣列倒置
790
			#回傳結果:
791
			#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗.
792
			#$result["error"],錯誤訊息陣列.
793
			#$result["function"],當前執行的函數名稱.
794
			#$result["convertArray"],轉置後的陣列內容.
795
			#必填參數:
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"]);
226 liveuser 801
 
3 liveuser 802
			#如果轉置陣列失敗
803
			if($convertArray["status"]=="false"){
226 liveuser 804
 
3 liveuser 805
				#設置執行失敗
806
				$result["status"]="false";
226 liveuser 807
 
3 liveuser 808
				#設置執行錯誤訊息
809
				$result["error"]=$convertArray;
810
 
811
				#回傳結果
812
				return $result;
226 liveuser 813
 
3 liveuser 814
				}#if end
226 liveuser 815
 
3 liveuser 816
			#取得轉置後的 $result["value"] 陣列
817
			$result["value"]=$convertArray["convertArray"];
226 liveuser 818
 
3 liveuser 819
			#函式說明:
820
			#將陣列倒置
821
			#回傳結果:
822
			#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗.
823
			#$result["error"],錯誤訊息陣列.
824
			#$result["function"],當前執行的函數名稱.
825
			#$result["convertArray"],轉置後的陣列內容.
826
			#必填參數:
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"]);
226 liveuser 832
 
3 liveuser 833
			#如果轉置陣列失敗
834
			if($convertArray["status"]=="false"){
226 liveuser 835
 
3 liveuser 836
				#設置執行失敗
837
				$result["status"]="false";
226 liveuser 838
 
3 liveuser 839
				#設置執行錯誤訊息
840
				$result["error"]=$convertArray;
841
 
842
				#回傳結果
843
				return $result;
226 liveuser 844
 
3 liveuser 845
				}#if end
226 liveuser 846
 
3 liveuser 847
			#取得轉置後的 $result["key"] 陣列
848
			$result["key"]=$convertArray["convertArray"];
226 liveuser 849
 
3 liveuser 850
			#函式說明:
851
			#將陣列倒置
852
			#回傳結果:
853
			#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗.
854
			#$result["error"],錯誤訊息陣列.
855
			#$result["function"],當前執行的函數名稱.
856
			#$result["convertArray"],轉置後的陣列內容.
857
			#必填參數:
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"]);
226 liveuser 863
 
3 liveuser 864
			#如果轉置陣列失敗
865
			if($convertArray["status"]=="false"){
226 liveuser 866
 
3 liveuser 867
				#設置執行失敗
868
				$result["status"]="false";
226 liveuser 869
 
3 liveuser 870
				#設置執行錯誤訊息
871
				$result["error"]=$convertArray;
872
 
873
				#回傳結果
874
				return $result;
226 liveuser 875
 
3 liveuser 876
				}#if end
226 liveuser 877
 
3 liveuser 878
			#取得轉置後的 $result["content"] 陣列
879
			$result["content"]=$convertArray["convertArray"];
226 liveuser 880
 
3 liveuser 881
			}#if end
226 liveuser 882
 
3 liveuser 883
		#設置執行正常
226 liveuser 884
		$result["status"]="true";
885
 
3 liveuser 886
		#回傳結果
887
		return $result;
226 liveuser 888
 
3 liveuser 889
		}#function arrangeNum end
890
 
891
	/*
892
	#函式說明:
893
	#將數值透過 z-score normalization(zero-mean normalization) 進行正規化,結果會回傳一個陣列 。
894
	#回傳結果:
895
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
896
	#$result["function"],當前執行的函數名稱.
897
	#$result["error"],錯誤訊息陣列.
898
	#$result["newValue"][$i]爲第$i+1個數字經過正規化後的結果.
899
	#$result["oldValue"][$i]爲第$i+1個數字的原始內容.
900
	#必填參數:
901
	$conf["rawDataArray"]=array("");#爲原始資料的一維陣列。
902
	#可省略參數:
903
	#無.
904
	#參考資料:
905
	#無.
906
	#備註:
907
	#無.
908
	*/
909
	public static function zScoreNormalization($conf){
910
 
911
		#初始化要回傳的內容
912
		$result=array();
226 liveuser 913
 
3 liveuser 914
		#記錄當前執行的函數名稱
915
		$result["function"]=__FUNCTION__;
916
 
917
		#如果 $conf 不為陣列
918
		if(gettype($conf)!="array"){
226 liveuser 919
 
3 liveuser 920
			#設置執行失敗
921
			$result["status"]="false";
226 liveuser 922
 
3 liveuser 923
			#設置執行錯誤訊息
924
			$result["error"][]="\$conf變數須為陣列形態";
925
 
926
			#如果傳入的參數為 null
927
			if($conf==null){
226 liveuser 928
 
3 liveuser 929
				#設置執行錯誤訊息
930
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 931
 
3 liveuser 932
				}#if end
933
 
934
			#回傳結果
935
			return $result;
226 liveuser 936
 
3 liveuser 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");
226 liveuser 957
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 966
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 979
 
3 liveuser 980
			#設置執行失敗
981
			$result["status"]="false";
226 liveuser 982
 
3 liveuser 983
			#設置執行錯誤訊息
984
			$result["error"]=$checkArguments;
985
 
986
			#回傳結果
987
			return $result;
226 liveuser 988
 
3 liveuser 989
			}#if end
990
 
991
		#如果檢查不通過
992
		if($checkArguments["passed"]=="false"){
226 liveuser 993
 
3 liveuser 994
			#設置執行失敗
995
			$result["status"]="false";
226 liveuser 996
 
3 liveuser 997
			#設置執行錯誤訊息
998
			$result["error"]=$checkArguments;
999
 
1000
			#回傳結果
1001
			return $result;
226 liveuser 1002
 
3 liveuser 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"){
226 liveuser 1016
 
3 liveuser 1017
			#設置執行失敗
1018
			$result["status"]="false";
226 liveuser 1019
 
3 liveuser 1020
			#設置執行錯誤訊息
1021
			$result["error"]=$mean;
1022
 
1023
			#回傳結果
1024
			return $result;
226 liveuser 1025
 
3 liveuser 1026
			}#if end
226 liveuser 1027
 
3 liveuser 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"){
226 liveuser 1043
 
3 liveuser 1044
			#設置執行失敗
1045
			$result["status"]="false";
226 liveuser 1046
 
3 liveuser 1047
			#設置執行錯誤訊息
1048
			$result["error"]=$standardDeviaction;
1049
 
1050
			#回傳結果
1051
			return $result;
226 liveuser 1052
 
3 liveuser 1053
			}#if end
226 liveuser 1054
 
3 liveuser 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
	/*
1084
	#函式說明:
1085
	#求算相關係數(皮爾森係數),結果會回傳1數值。代表兩筆數據的相關層度,正值代表正相關;負值代表負相關。
1086
	#回傳結果:
1087
	#$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
1088
	#$result["error"],錯誤訊息陣列.
1089
	#$result["function"],當前執行的函數名稱.
1090
	#$result["content"],相關係數(皮爾森係數).
1091
	#必填參數:
1092
	$conf["rawDataArrayA"]=array("");#爲第1組數據,元素數量須與$rawDataArray["B"]一樣.
1093
	$conf["rawDataArrayB"]=array("");#爲第2組數據,元素數量須與$rawDataArray["A"]一樣.
1094
	#可省略參數:
1095
	#無.
1096
	#參考資料:
1097
	#無.
1098
	#備註:
1099
	#無.
1100
	*/
1101
	public static function computeCorrelationCoefficientForNumbericData(&$conf){
1102
 
1103
		#取得將參數丟給R執行後的回傳結果
1104
		return R::computeCorrelationCoefficientForNumbericData($conf);
1105
 
1106
		}#function computeCorrelationCoefficientForNumbericData end
1107
 
1108
	/*
1109
	#函式說明:
1110
	#計算兩組數字數據的共變異數,結果會回傳一個數值
1111
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1112
	#$result["error"],錯誤訊息陣列.
1113
	#$result["function"],當前執行的函數名稱.
1114
	#$result["content"],兩組數字數據的共變異數.
1115
	#必填參數:
1116
	$conf["rawDataArrayA"]="";#爲第1組數據
1117
	$conf["rawDataArrayB"]="";#爲第2組數據
1118
	#可省略參數:
1119
	#無.
1120
	#參考資料:
1121
	#無.
1122
	#備註:
1123
	#無.
1124
	*/
1125
	public static function computeCovarianceOfNumericData(&$conf){
1126
 
1127
		#初始化要回傳的內容
1128
		$result=array();
226 liveuser 1129
 
3 liveuser 1130
		#記錄當前執行的函數名稱
1131
		$result["function"]=__FUNCTION__;
1132
 
1133
		#如果 $conf 不為陣列
1134
		if(gettype($conf)!="array"){
226 liveuser 1135
 
3 liveuser 1136
			#設置執行失敗
1137
			$result["status"]="false";
226 liveuser 1138
 
3 liveuser 1139
			#設置執行錯誤訊息
1140
			$result["error"][]="\$conf變數須為陣列形態";
1141
 
1142
			#如果傳入的參數為 null
1143
			if($conf==null){
226 liveuser 1144
 
3 liveuser 1145
				#設置執行錯誤訊息
1146
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1147
 
3 liveuser 1148
				}#if end
1149
 
1150
			#回傳結果
1151
			return $result;
226 liveuser 1152
 
3 liveuser 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");
226 liveuser 1173
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 1182
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 1195
 
3 liveuser 1196
			#設置執行失敗
1197
			$result["status"]="false";
226 liveuser 1198
 
3 liveuser 1199
			#設置執行錯誤訊息
1200
			$result["error"]=$checkArguments;
1201
 
1202
			#回傳結果
1203
			return $result;
226 liveuser 1204
 
3 liveuser 1205
			}#if end
226 liveuser 1206
 
3 liveuser 1207
		#如果檢查不通過
1208
		if($checkArguments["passed"]=="false"){
226 liveuser 1209
 
3 liveuser 1210
			#設置執行失敗
1211
			$result["status"]="false";
226 liveuser 1212
 
3 liveuser 1213
			#設置執行錯誤訊息
1214
			$result["error"]=$checkArguments;
1215
 
1216
			#回傳結果
1217
			return $result;
226 liveuser 1218
 
3 liveuser 1219
			}#if end
1220
 
1221
		#A的期望值等於A的平均數
1222
		#函式說明:
1223
		#計算平均數
1224
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1225
		#$result["error"],錯誤訊息陣列.
1226
		#$result["function"],當前執行的函數名稱.
1227
		#$result["content"],平均數.
1228
		#必填參數:
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"){
226 liveuser 1235
 
3 liveuser 1236
			#設置執行失敗
1237
			$result["status"]="false";
226 liveuser 1238
 
3 liveuser 1239
			#設置執行錯誤訊息
1240
			$result["error"]=$meanA;
1241
 
1242
			#回傳結果
1243
			return $result;
226 liveuser 1244
 
3 liveuser 1245
			}#if end
1246
 
1247
		#取得平均數A
1248
		$meanA=$meanA["content"];
1249
 
1250
		#A的期望值等於A的平均數
1251
		#函式說明:
1252
		#計算平均數
1253
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1254
		#$result["error"],錯誤訊息陣列.
1255
		#$result["function"],當前執行的函數名稱.
1256
		#$result["content"],平均數.
1257
		#必填參數:
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"){
226 liveuser 1264
 
3 liveuser 1265
			#設置執行失敗
1266
			$result["status"]="false";
226 liveuser 1267
 
3 liveuser 1268
			#設置執行錯誤訊息
1269
			$result["error"]=$meanB;
1270
 
1271
			#回傳結果
1272
			return $result;
226 liveuser 1273
 
3 liveuser 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;
226 liveuser 1295
 
3 liveuser 1296
		#設置執行正常
1297
		$result["status"]="true";
1298
 
1299
		#回傳結果
1300
		return $result;
1301
 
1302
		}#function computeCovarianceOfNumericData end
1303
 
1304
	/*
1305
	#函式說明:
1306
	#計算一組數據的中間數值
1307
	#回傳結果:
1308
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1309
	#$result["error"],錯誤訊息陣列.
1310
	#$result["function"],當前執行的函數名稱.
1311
	#$result["content"],最一組數據的中間數值.
1312
	#必填參數:
1313
	$conf["rawDataArray"]=array("");#要進行計算的數據陣列
1314
	#可省略參數:
1315
	#無.
1316
	#參考資料:
1317
	#無.
1318
	#備註:
1319
	#無.
1320
	*/
1321
	public static function getMedianNum(&$conf){
1322
 
1323
		#初始化要回傳的內容
1324
		$result=array();
226 liveuser 1325
 
3 liveuser 1326
		#記錄當前執行的函數名稱
1327
		$result["function"]=__FUNCTION__;
1328
 
1329
		#如果 $conf 不為陣列
1330
		if(gettype($conf)!="array"){
226 liveuser 1331
 
3 liveuser 1332
			#設置執行失敗
1333
			$result["status"]="false";
226 liveuser 1334
 
3 liveuser 1335
			#設置執行錯誤訊息
1336
			$result["error"][]="\$conf變數須為陣列形態";
1337
 
1338
			#如果傳入的參數為 null
1339
			if($conf==null){
226 liveuser 1340
 
3 liveuser 1341
				#設置執行錯誤訊息
1342
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1343
 
3 liveuser 1344
				}#if end
1345
 
1346
			#回傳結果
1347
			return $result;
226 liveuser 1348
 
3 liveuser 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");
226 liveuser 1369
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 1378
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 1391
 
3 liveuser 1392
			#設置執行失敗
1393
			$result["status"]="false";
226 liveuser 1394
 
3 liveuser 1395
			#設置執行錯誤訊息
1396
			$result["error"]=$checkArguments;
1397
 
1398
			#回傳結果
1399
			return $result;
226 liveuser 1400
 
3 liveuser 1401
			}#if end
226 liveuser 1402
 
3 liveuser 1403
		#如果檢查不通過
1404
		if($checkArguments["passed"]=="false"){
226 liveuser 1405
 
3 liveuser 1406
			#設置執行失敗
1407
			$result["status"]="false";
226 liveuser 1408
 
3 liveuser 1409
			#設置執行錯誤訊息
1410
			$result["error"]=$checkArguments;
1411
 
1412
			#回傳結果
1413
			return $result;
226 liveuser 1414
 
3 liveuser 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
	/*
1454
	#函式說明:
1455
	#取得Q1、Q2、Q3(四分位數)
1456
	#回傳結果:
1457
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1458
	#$result["error"],錯誤訊息陣列.
1459
	#$result["function"],當前執行的函數名稱.
1460
	#$result["Q1"],Q1值
1461
	#$result["Q2"],Q2值
1462
	#$result["Q3"],Q3值
1463
	#必填參數:
1464
	$conf["rawDataArray"]=array();#要求算四分位的數據
1465
	#可省略參數:
1466
	#無.
1467
	#參考資料:
1468
	#https://zh.wikipedia.org/zh-tw/%E5%9B%9B%E5%88%86%E4%BD%8D%E6%95%B0
1469
	#備註:
1470
	#無.
1471
	*/
1472
	public static function getQuartile(&$conf){
226 liveuser 1473
 
3 liveuser 1474
		#初始化要回傳的內容
1475
		$result=array();
226 liveuser 1476
 
3 liveuser 1477
		#記錄當前執行的函數名稱
1478
		$result["function"]=__FUNCTION__;
1479
 
1480
		#如果 $conf 不為陣列
1481
		if(gettype($conf)!="array"){
226 liveuser 1482
 
3 liveuser 1483
			#設置執行失敗
1484
			$result["status"]="false";
226 liveuser 1485
 
3 liveuser 1486
			#設置執行錯誤訊息
1487
			$result["error"][]="\$conf變數須為陣列形態";
1488
 
1489
			#如果傳入的參數為 null
1490
			if($conf==null){
226 liveuser 1491
 
3 liveuser 1492
				#設置執行錯誤訊息
1493
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1494
 
3 liveuser 1495
				}#if end
1496
 
1497
			#回傳結果
1498
			return $result;
226 liveuser 1499
 
3 liveuser 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");
226 liveuser 1520
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 1529
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 1542
 
3 liveuser 1543
			#設置執行失敗
1544
			$result["status"]="false";
226 liveuser 1545
 
3 liveuser 1546
			#設置執行錯誤訊息
1547
			$result["error"]=$checkArguments;
1548
 
1549
			#回傳結果
1550
			return $result;
226 liveuser 1551
 
3 liveuser 1552
			}#if end
1553
 
1554
		#如果檢查不通過
1555
		if($checkArguments["passed"]=="false"){
226 liveuser 1556
 
3 liveuser 1557
			#設置執行失敗
1558
			$result["status"]="false";
226 liveuser 1559
 
3 liveuser 1560
			#設置執行錯誤訊息
1561
			$result["error"]=$checkArguments;
1562
 
1563
			#回傳結果
1564
			return $result;
226 liveuser 1565
 
3 liveuser 1566
			}#if end
226 liveuser 1567
 
3 liveuser 1568
		#排序原始數據使之從小到大
1569
		#函式說明:
1570
		#排列一組數字
1571
		#回傳結果:
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"],過排序後依照遞增或遞減順序排列的數字陣列.
1579
		#必填參數:
1580
		$conf["math::arrangeNum"]["rawDataArray"]=$conf["rawDataArray"];#要排序的數字陣列
1581
		#可省略參數:
1582
		$conf["math::arrangeNum"]["asc"]="true";#如果爲"true"則排序順變爲從小到大,若為"false"則為從大到小,預設為"false".
1583
		$arrangeNum=math::arrangeNum($conf["math::arrangeNum"]);
1584
		unset($conf["math::arrangeNum"]);
226 liveuser 1585
 
3 liveuser 1586
		#如果 排序原始數據 失敗
1587
		if($arrangeNum["status"]=="false"){
226 liveuser 1588
 
3 liveuser 1589
			#設置執行失敗
1590
			$result["status"]="false";
226 liveuser 1591
 
3 liveuser 1592
			#設置執行錯誤訊息
1593
			$result["error"]=$arrangeNum;
1594
 
1595
			#回傳結果
1596
			return $result;
226 liveuser 1597
 
3 liveuser 1598
			}#if end
226 liveuser 1599
 
3 liveuser 1600
		#取得Q2
1601
		#函式說明:
1602
		#計算一組數據的中間數值
1603
		#回傳結果:
1604
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1605
		#$result["error"],錯誤訊息陣列.
1606
		#$result["function"],當前執行的函數名稱.
1607
		#$result["content"],最一組數據的中間數值.
1608
		#必填參數:
1609
		$conf["math"]["getMedianNum"]["rawDataArray"]=$arrangeNum["content"];#要進行計算的數據陣列
1610
		$mediaNum=math::getMedianNum($conf["math"]["getMedianNum"]);
1611
		unset($conf["math"]["getMedianNum"]);
226 liveuser 1612
 
3 liveuser 1613
		#如果取得Q2失敗
1614
		if($mediaNum["status"]=="false"){
226 liveuser 1615
 
3 liveuser 1616
			#設置執行失敗
1617
			$result["status"]="false";
226 liveuser 1618
 
3 liveuser 1619
			#設置執行錯誤訊息
1620
			$result["error"]=$mediaNum;
1621
 
1622
			#回傳結果
1623
			return $result;
226 liveuser 1624
 
3 liveuser 1625
			}#if end
226 liveuser 1626
 
3 liveuser 1627
		#取得Q2
1628
		$result["Q2"]=$mediaNum["content"];
226 liveuser 1629
 
3 liveuser 1630
		#取得原始輸入陣列的元素數目
1631
		$varCount=count($arrangeNum["content"]);
226 liveuser 1632
 
3 liveuser 1633
		#初始化儲存用於計算Q1的元素陣列
1634
		$q2RawArray=array();
226 liveuser 1635
 
3 liveuser 1636
		#另存小於等於Q2元素的陣列
1637
		for($i=0;$i<$varCount;$i++){
226 liveuser 1638
 
3 liveuser 1639
			#取得小於等於Q2的元素
1640
			if($arrangeNum["content"][$i]<=$result["Q2"]){
226 liveuser 1641
 
3 liveuser 1642
				#取得小於等於Q2的元素
1643
				$q2RawArray[]=$arrangeNum["content"][$i];
226 liveuser 1644
 
3 liveuser 1645
				}#if end
226 liveuser 1646
 
3 liveuser 1647
			}#for end
226 liveuser 1648
 
3 liveuser 1649
		#求得Q1
1650
		#函式說明:
1651
		#計算一組數據的中間數值
1652
		#回傳結果:
1653
		#一組數據的中間數值
1654
		#必填參數:
1655
		$conf["math"]["getMedianNum"]["rawDataArray"]=$q2RawArray;#要進行計算的數據陣列
1656
		$mediaNum=math::getMedianNum($conf["math"]["getMedianNum"]);
1657
		unset($conf["math"]["getMedianNum"]);
226 liveuser 1658
 
3 liveuser 1659
		#如果取得Q1失敗
1660
		if($mediaNum["status"]=="false"){
1661
 
1662
			#設置執行失敗
1663
			$result["status"]="false";
226 liveuser 1664
 
3 liveuser 1665
			#設置執行錯誤訊息
1666
			$result["error"]=$mediaNum;
1667
 
1668
			#回傳結果
1669
			return $result;
226 liveuser 1670
 
3 liveuser 1671
			}#if end
226 liveuser 1672
 
3 liveuser 1673
		#取得Q1
1674
		$result["Q1"]=$mediaNum["content"];
226 liveuser 1675
 
3 liveuser 1676
		#初始化儲存用於計算Q3的元素陣列
1677
		$q3RawArray=array();
226 liveuser 1678
 
3 liveuser 1679
		#另存大於等於Q2元素的陣列
1680
		for($i=0;$i<$varCount;$i++){
226 liveuser 1681
 
3 liveuser 1682
			#取得小於等於Q2的元素
1683
			if($arrangeNum["content"][$i]>=$result["Q2"]){
226 liveuser 1684
 
3 liveuser 1685
				#取得小於等於Q2的元素
1686
				$q3RawArray[]=$arrangeNum["content"][$i];
226 liveuser 1687
 
3 liveuser 1688
				}#if end
226 liveuser 1689
 
3 liveuser 1690
			}#for end
226 liveuser 1691
 
3 liveuser 1692
		#求得Q3
1693
		#函式說明:
1694
		#計算一組數據的中間數值
1695
		#回傳結果:
1696
		#一組數據的中間數值
1697
		#必填參數:
1698
		$conf["math"]["getMedianNum"]["rawDataArray"]=$q3RawArray;#要進行計算的數據陣列
1699
		$mediaNum=math::getMedianNum($conf["math"]["getMedianNum"]);
1700
		unset($conf["math"]["getMedianNum"]);
226 liveuser 1701
 
3 liveuser 1702
		#如果 取得中位數 失敗
1703
		if($mediaNum["status"]=="false"){
226 liveuser 1704
 
3 liveuser 1705
			#設置執行失敗
1706
			$result["status"]="false";
226 liveuser 1707
 
3 liveuser 1708
			#設置執行錯誤訊息
1709
			$result["error"]=$mediaNum;
1710
 
1711
			#回傳結果
1712
			return $result;
226 liveuser 1713
 
1714
			}#if end
1715
 
1716
		#取得 Q3
3 liveuser 1717
		$result["Q3"]=$mediaNum["content"];
226 liveuser 1718
 
3 liveuser 1719
		#設置執行正常
226 liveuser 1720
		$result["status"]="true";
1721
 
3 liveuser 1722
		#回傳結果
1723
		return $result;
226 liveuser 1724
 
3 liveuser 1725
		}#function getQuarter end
1726
 
1727
	/*
1728
	#函式說明:
1729
	#判斷在常態分佈的條件下針對單一變量會有那些 outlier(異常值),結果會回傳一個陣列。
1730
	#回傳結果:
1731
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1732
	#$result["error"],錯誤訊息陣列.
1733
	#$result["function"],當前執行的函數名稱.
1734
	#$result["content"],陣列,一個含有離羣值的陣列.
1735
	#$result["founded"],字串,"true"代表有離群值,"false"代表沒有離群值出現.
1736
	#必填參數:
1737
	$conf["rawDataArray"];#爲原始數據的陣列
1738
	#可省略參數:
1739
	#無.
1740
	#參考資料來源:
226 liveuser 1741
	#http://zhidao.baidu.com/question/252394894.html
3 liveuser 1742
	#備註:
1743
	#無.
1744
	*/
1745
	public static function findOutlier(&$conf){
1746
 
1747
		#初始化要回傳的內容
1748
		$result=array();
226 liveuser 1749
 
3 liveuser 1750
		#記錄當前執行的函數名稱
1751
		$result["function"]=__FUNCTION__;
1752
 
1753
		#如果 $conf 不為陣列
1754
		if(gettype($conf)!="array"){
226 liveuser 1755
 
3 liveuser 1756
			#設置執行失敗
1757
			$result["status"]="false";
226 liveuser 1758
 
3 liveuser 1759
			#設置執行錯誤訊息
1760
			$result["error"][]="\$conf變數須為陣列形態";
1761
 
1762
			#如果傳入的參數為 null
1763
			if($conf==null){
226 liveuser 1764
 
3 liveuser 1765
				#設置執行錯誤訊息
1766
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1767
 
3 liveuser 1768
				}#if end
1769
 
1770
			#回傳結果
1771
			return $result;
226 liveuser 1772
 
3 liveuser 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");
226 liveuser 1793
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 1802
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 1815
 
3 liveuser 1816
			#設置執行失敗
1817
			$result["status"]="false";
226 liveuser 1818
 
3 liveuser 1819
			#設置執行錯誤訊息
1820
			$result["error"]=$checkArguments;
1821
 
1822
			#回傳結果
1823
			return $result;
226 liveuser 1824
 
3 liveuser 1825
			}#if end
226 liveuser 1826
 
3 liveuser 1827
		#如果檢查不通過
1828
		if($checkArguments["passed"]=="false"){
226 liveuser 1829
 
3 liveuser 1830
			#設置執行失敗
1831
			$result["status"]="false";
226 liveuser 1832
 
3 liveuser 1833
			#設置執行錯誤訊息
1834
			$result["error"]=$checkArguments;
1835
 
1836
			#回傳結果
1837
			return $result;
226 liveuser 1838
 
3 liveuser 1839
			}#if end
1840
 
1841
		#初始化沒有找到離群值
1842
		$result["founded"]="false";
1843
 
1844
		#函式說明:
1845
		#排列一組數字
1846
		#回傳結果:
1847
		#經過排序後由大到小的數字陣列
1848
		#$result[$i]["key"],爲$i-1個算元素的key
1849
		#$result[$i]["value"], 爲$i-1個算元素的value
1850
		#必填參數:
1851
		$conf["math"]["arrangeNum"]["rawDataArray"]=$conf["rawDataArray"];#要排序的數字陣列
1852
		#可省略參數:
1853
		#$conf["asc"]="true";#如果爲 true 則排序順變爲從小到大
1854
		$rawDataArray=math::arrangeNum($conf["math"]["arrangeNum"]);
1855
		unset($conf["math"]["arrangeNum"]);
1856
 
1857
		#如果由大排到小失敗
1858
		if($rawDataArray["status"]=="false"){
226 liveuser 1859
 
3 liveuser 1860
			#設置執行失敗
1861
			$result["status"]="false";
226 liveuser 1862
 
3 liveuser 1863
			#設置執行錯誤訊息
1864
			$result["error"]=$rawDataArray;
1865
 
1866
			#回傳結果
1867
			return $result;
226 liveuser 1868
 
3 liveuser 1869
			}#if end
1870
 
1871
		#初始化轉化好的一維陣列
1872
		$oneDimetionArray=$rawDataArray["content"];
1873
 
1874
		#函式說明:
1875
		#取得Q1、Q2、Q3(四分位數)
1876
		#回傳結果:
1877
		#$result["Q1"],Q1值
1878
		#$result["Q2"],Q2值
1879
		#$result["Q3"],Q3值
1880
		#必填參數:
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"]);
226 liveuser 1886
 
3 liveuser 1887
		#如果尋找Q1,Q2,Q3失敗
1888
		if($quartile["status"]=="false"){
226 liveuser 1889
 
3 liveuser 1890
			#設置執行失敗
1891
			$result["status"]="false";
226 liveuser 1892
 
3 liveuser 1893
			#設置執行錯誤訊息
1894
			$result["error"]=$quartile;
1895
 
1896
			#回傳結果
1897
			return $result;
226 liveuser 1898
 
3 liveuser 1899
			}#if end
226 liveuser 1900
 
3 liveuser 1901
		#求算IQR(四分位距)
1902
		$iqr=$quartile["Q3"]-$quartile["Q1"];
226 liveuser 1903
 
3 liveuser 1904
		#要檢測的元素有幾個就執行幾次
1905
		for($i=0;$i<count($oneDimetionArray);$i++){
226 liveuser 1906
 
3 liveuser 1907
			#如果要檢測離羣值的陣列元素數值減掉Q2後大於1.5倍IQR
1908
			if(abs($oneDimetionArray[$i]-$quartile["Q2"])>$iqr*1.5 ){
226 liveuser 1909
 
3 liveuser 1910
				#取得離羣值
1911
				$outlier[]=$oneDimetionArray[$i];
226 liveuser 1912
 
3 liveuser 1913
				}#if end
226 liveuser 1914
 
3 liveuser 1915
			}#for end
226 liveuser 1916
 
3 liveuser 1917
		#如果有離群值
1918
		if(isset($outlier)){
226 liveuser 1919
 
3 liveuser 1920
			#設置有找到離群值
1921
			$result["founded"]="true";
226 liveuser 1922
 
3 liveuser 1923
			#另存離群值
1924
			$result["content"]=$outlier;
226 liveuser 1925
 
3 liveuser 1926
			}#if end
226 liveuser 1927
 
3 liveuser 1928
		#設置執行正常
1929
		$result["status"]="true";
226 liveuser 1930
 
3 liveuser 1931
		#回傳離羣值
1932
		return $result;
1933
 
1934
		}#function findOutlier end
226 liveuser 1935
 
3 liveuser 1936
	/*
1937
	#函式說明:
1938
	#找最大值,結果會回傳最大值.
1939
	#回傳結果:
1940
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1941
	#$result["error"],錯誤訊息陣列.
1942
	#$result["function"],當前執行的函數名稱.
1943
	#$result["key"],最大值原先的key.
1944
	#$result["value"],最大值的數字.
1945
	#必填參數:
1946
	#$conf["rawDataArray"],陣列,爲原始數據.
1947
	$conf["rawDataArray"]=array();
1948
	#可省略參數:
1949
	#無.
1950
	#參考資料:
1951
	#無.
1952
	#備註:
1953
	#無.
1954
	*/
1955
	public static function getMaxValue(&$conf){
1956
 
1957
		#初始化要回傳的內容
1958
		$result=array();
226 liveuser 1959
 
3 liveuser 1960
		#記錄當前執行的函數名稱
1961
		$result["function"]=__FUNCTION__;
1962
 
1963
		#如果 $conf 不為陣列
1964
		if(gettype($conf)!="array"){
226 liveuser 1965
 
3 liveuser 1966
			#設置執行失敗
1967
			$result["status"]="false";
226 liveuser 1968
 
3 liveuser 1969
			#設置執行錯誤訊息
1970
			$result["error"][]="\$conf變數須為陣列形態";
1971
 
1972
			#如果傳入的參數為 null
1973
			if($conf==null){
226 liveuser 1974
 
3 liveuser 1975
				#設置執行錯誤訊息
1976
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1977
 
3 liveuser 1978
				}#if end
1979
 
1980
			#回傳結果
1981
			return $result;
226 liveuser 1982
 
3 liveuser 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");
226 liveuser 2003
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 2012
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 2025
 
3 liveuser 2026
			#設置執行失敗
2027
			$result["status"]="false";
226 liveuser 2028
 
3 liveuser 2029
			#設置執行錯誤訊息
2030
			$result["error"]=$checkArguments;
2031
 
2032
			#回傳結果
2033
			return $result;
226 liveuser 2034
 
3 liveuser 2035
			}#if end
226 liveuser 2036
 
3 liveuser 2037
		#如果檢查不通過
2038
		if($checkArguments["passed"]=="false"){
226 liveuser 2039
 
3 liveuser 2040
			#設置執行失敗
2041
			$result["status"]="false";
226 liveuser 2042
 
3 liveuser 2043
			#設置執行錯誤訊息
2044
			$result["error"]=$checkArguments;
2045
 
2046
			#回傳結果
2047
			return $result;
226 liveuser 2048
 
3 liveuser 2049
			}#if end
226 liveuser 2050
 
3 liveuser 2051
		#初始化要回傳的陣列
2052
		$outputArray=array();
2053
 
2054
		#初始化技計數的變數
2055
		$count=0;
2056
 
2057
		#取得每個元素的key值
2058
		foreach($conf["rawDataArray"] as $key=>$value){
226 liveuser 2059
 
3 liveuser 2060
			#另存 key
2061
			$outputArray[$count]["key"]=$key;
226 liveuser 2062
 
3 liveuser 2063
			#另存 value
2064
			$outputArray[$count]["value"]=$value;
226 liveuser 2065
 
3 liveuser 2066
			#計數+1
2067
			$count++;
226 liveuser 2068
 
3 liveuser 2069
			}#foreach end
226 liveuser 2070
 
3 liveuser 2071
		#假定第一個數字爲最大值
2072
		$max=$outputArray[0];
2073
 
2074
		#找出最大值
2075
		for($i=1;$i<count($outputArray);$i++){
2076
 
2077
			#如果目前認爲的最大值小於後一個數字,
2078
			if($max["value"]<$outputArray[$i]["value"]){
226 liveuser 2079
 
3 liveuser 2080
				#則將較大的數字放進 $max 裏面,
2081
				$max=$outputArray[$i];
2082
 
2083
				}#判斷式結束
2084
 
226 liveuser 2085
			}#迴圈結束
3 liveuser 2086
 
2087
		#取得最大值的原先key名稱
226 liveuser 2088
		$result["key"]=$max["key"];
3 liveuser 2089
 
2090
		#取得最大值
2091
		$result["value"]=$max["value"];
2092
 
2093
		#設置執行正常
2094
		$result["status"]="true";
2095
 
2096
		#回傳最大值
2097
		return $result;
2098
 
2099
		}#函式結束
2100
 
2101
	/*
2102
	#函式說明:
2103
	#找最小值,結果會回傳最小值
2104
	#回傳內容:
2105
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2106
	#$result["error"],錯誤訊息陣列.
2107
	#$result["function"],當前執行的函數名稱.
2108
	#$result["key"],最大值原先的key.
2109
	#$result["value"],陣列裏面最小的數值.
2110
	#必填參數:
2111
	$conf["rawDataArray"]=array();#爲原始數據
2112
	#可省略參數:
2113
	#無.
2114
	#參考資料:
2115
	#無.
2116
	#備註:
2117
	#無.
2118
	*/
2119
	public static function getMinValue(&$conf){
2120
 
2121
		#初始化要回傳的內容
2122
		$result=array();
226 liveuser 2123
 
3 liveuser 2124
		#記錄當前執行的函數名稱
2125
		$result["function"]=__FUNCTION__;
2126
 
2127
		#如果 $conf 不為陣列
2128
		if(gettype($conf)!="array"){
226 liveuser 2129
 
3 liveuser 2130
			#設置執行失敗
2131
			$result["status"]="false";
226 liveuser 2132
 
3 liveuser 2133
			#設置執行錯誤訊息
2134
			$result["error"][]="\$conf變數須為陣列形態";
2135
 
2136
			#如果傳入的參數為 null
2137
			if($conf==null){
226 liveuser 2138
 
3 liveuser 2139
				#設置執行錯誤訊息
2140
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2141
 
3 liveuser 2142
				}#if end
2143
 
2144
			#回傳結果
2145
			return $result;
226 liveuser 2146
 
3 liveuser 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");
226 liveuser 2167
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 2176
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 2189
 
3 liveuser 2190
			#設置執行失敗
2191
			$result["status"]="false";
226 liveuser 2192
 
3 liveuser 2193
			#設置執行錯誤訊息
2194
			$result["error"]=$checkArguments;
2195
 
2196
			#回傳結果
2197
			return $result;
226 liveuser 2198
 
3 liveuser 2199
			}#if end
2200
 
2201
		#如果檢查不通過
2202
		if($checkArguments["passed"]=="false"){
226 liveuser 2203
 
3 liveuser 2204
			#設置執行失敗
2205
			$result["status"]="false";
226 liveuser 2206
 
3 liveuser 2207
			#設置執行錯誤訊息
2208
			$result["error"]=$checkArguments;
2209
 
2210
			#回傳結果
2211
			return $result;
226 liveuser 2212
 
3 liveuser 2213
			}#if end
2214
 
2215
		#初始化技計數的變數
2216
		$count=0;
2217
 
2218
		#取得每個元素的key值
2219
		foreach($conf["rawDataArray"] as $key=>$value){
226 liveuser 2220
 
3 liveuser 2221
			#另存 key
2222
			$outputArray[$count]["key"]=$key;
226 liveuser 2223
 
3 liveuser 2224
			#另存 value
2225
			$outputArray[$count]["value"]=$value;
226 liveuser 2226
 
3 liveuser 2227
			#計數++
2228
			$count++;
226 liveuser 2229
 
3 liveuser 2230
			}#foreach end
226 liveuser 2231
 
3 liveuser 2232
		#假定第一個數字爲最小值
2233
		$min=$outputArray[0];
2234
 
2235
		#找出最小值
2236
		for($i=1;$i<count($outputArray);$i++){
2237
 
2238
			#如果目前認爲的最小值大於後一個數字,
2239
			if($min["value"]>$outputArray[$i]["value"]){
226 liveuser 2240
 
3 liveuser 2241
				#則將較小的數字放進 $min 裏面,
2242
				$min=$outputArray[$i];
2243
 
2244
				}#判斷式結束
2245
 
226 liveuser 2246
			}#迴圈結束
3 liveuser 2247
 
2248
		#取得最小值的原先key名稱
226 liveuser 2249
		$result["key"]=$min["key"];
2250
 
3 liveuser 2251
		#取得最小值
2252
		$result["value"]=$min["value"];
2253
 
2254
		#設置執行正常
2255
		$result["status"]="true";
2256
 
2257
		#回傳最大值
2258
		return $result;
2259
 
2260
		}#函式結束
2261
 
2262
	/*
2263
	#函式說明:
2264
	#找絕對值後的最大值,結果會回傳最大值
2265
	#回傳結果:
2266
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2267
	#$result["error"],錯誤訊息陣列.
2268
	#$result["function"],當前執行的函數名稱.
2269
	#$result["key"],絕對值後的最大值原先的key.
2270
	#$result["value"],絕對值前的最大值數字.
2271
	#$result["absValue"],絕對值後的最大值數字.
2272
	#必填參數:
2273
	#$conf["rawDataArray"]=array();#爲原始數據
2274
	#可省略參數:
2275
	#無.
2276
	#參考資料:
2277
	#無.
2278
	#備註:
2279
	#無.
2280
	*/
2281
	public static function getMaxAbsoluteValue(&$conf){
2282
 
2283
		#初始化要回傳的內容
2284
		$result=array();
226 liveuser 2285
 
3 liveuser 2286
		#記錄當前執行的函數名稱
2287
		$result["function"]=__FUNCTION__;
2288
 
2289
		#如果 $conf 不為陣列
2290
		if(gettype($conf)!="array"){
226 liveuser 2291
 
3 liveuser 2292
			#設置執行失敗
2293
			$result["status"]="false";
226 liveuser 2294
 
3 liveuser 2295
			#設置執行錯誤訊息
2296
			$result["error"][]="\$conf變數須為陣列形態";
2297
 
2298
			#如果傳入的參數為 null
2299
			if($conf==null){
226 liveuser 2300
 
3 liveuser 2301
				#設置執行錯誤訊息
2302
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2303
 
3 liveuser 2304
				}#if end
2305
 
2306
			#回傳結果
2307
			return $result;
226 liveuser 2308
 
3 liveuser 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");
226 liveuser 2329
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 2338
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 2351
 
3 liveuser 2352
			#設置執行失敗
2353
			$result["status"]="false";
226 liveuser 2354
 
3 liveuser 2355
			#設置執行錯誤訊息
2356
			$result["error"]=$checkArguments;
2357
 
2358
			#回傳結果
2359
			return $result;
226 liveuser 2360
 
3 liveuser 2361
			}#if end
226 liveuser 2362
 
3 liveuser 2363
		#如果檢查不通過
2364
		if($checkArguments["passed"]=="false"){
226 liveuser 2365
 
3 liveuser 2366
			#設置執行失敗
2367
			$result["status"]="false";
226 liveuser 2368
 
3 liveuser 2369
			#設置執行錯誤訊息
2370
			$result["error"]=$checkArguments;
2371
 
2372
			#回傳結果
2373
			return $result;
226 liveuser 2374
 
3 liveuser 2375
			}#if end
2376
 
2377
		#初始化儲存要比較的數字陣列
2378
		$outputArray=array();
2379
 
2380
		#初始化技計數的變數
2381
		$count=0;
2382
 
2383
		#取得每個元素的key值
2384
		foreach($conf["rawDataArray"] as $key=>$value){
226 liveuser 2385
 
3 liveuser 2386
			#另存 key
2387
			$outputArray[$count]["key"]=$key;
226 liveuser 2388
 
3 liveuser 2389
			#另存 value
2390
			$outputArray[$count]["value"]=$value;
226 liveuser 2391
 
3 liveuser 2392
			#另存 絕對值過後的數值
2393
			$outputArray[$count]["absValue"]=abs($value);
226 liveuser 2394
 
3 liveuser 2395
			#計數+1
2396
			$count++;
226 liveuser 2397
 
3 liveuser 2398
			}#foreach end
226 liveuser 2399
 
3 liveuser 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"]){
226 liveuser 2410
 
3 liveuser 2411
				#則將較大的數字放進 $max 裏面,
2412
				$max["value"]=$outputArray[$i]["value"];
2413
				$max["key"]=$outputArray[$i]["key"];
2414
				$max["absValue"]=$outputArray[$i]["absValue"];
2415
 
2416
				}#判斷式結束
2417
 
226 liveuser 2418
			}#迴圈結束
2419
 
3 liveuser 2420
		#儲存絕對值後最大值的資訊
2421
		$result["key"]=$max["key"];
2422
		$result["value"]=$max["value"];
2423
		$result["absValue"]=$max["absValue"];
2424
 
226 liveuser 2425
		#設置執行正常
3 liveuser 2426
		$result["status"]="true";
2427
 
2428
		#回傳最大值
2429
		return $result;
2430
 
2431
		}#函式結束
2432
 
2433
	/*
2434
	#函式說明:
2435
	#找絕對值後的最小值
2436
	#回傳結果:
2437
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2438
	#$result["error"],錯誤訊息陣列.
2439
	#$result["function"],當前執行的函數名稱.
2440
	#$result["key"],絕對值後的最小值原先的key.
2441
	#$result["value"],絕對值前的最小值數字.
2442
	#$result["absValue"],絕對值後的最小值數字.
2443
	#必填參數:
2444
	$conf["rawDataArray"]=array();#爲原始數據
2445
	#可省略參數:
2446
	#無.
2447
	#參考資料:
2448
	#無.
2449
	#備註:
2450
	#無.
2451
	*/
2452
	public static function getMinAbsoluteValue(&$conf){
2453
 
2454
		#初始化要回傳的內容
2455
		$result=array();
226 liveuser 2456
 
3 liveuser 2457
		#記錄當前執行的函數名稱
2458
		$result["function"]=__FUNCTION__;
2459
 
2460
		#如果 $conf 不為陣列
2461
		if(gettype($conf)!="array"){
226 liveuser 2462
 
3 liveuser 2463
			#設置執行失敗
2464
			$result["status"]="false";
226 liveuser 2465
 
3 liveuser 2466
			#設置執行錯誤訊息
2467
			$result["error"][]="\$conf變數須為陣列形態";
2468
 
2469
			#如果傳入的參數為 null
2470
			if($conf==null){
226 liveuser 2471
 
3 liveuser 2472
				#設置執行錯誤訊息
2473
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2474
 
3 liveuser 2475
				}#if end
2476
 
2477
			#回傳結果
2478
			return $result;
226 liveuser 2479
 
3 liveuser 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");
226 liveuser 2500
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 2509
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 2522
 
3 liveuser 2523
			#設置執行失敗
2524
			$result["status"]="false";
226 liveuser 2525
 
3 liveuser 2526
			#設置執行錯誤訊息
2527
			$result["error"]=$checkArguments;
2528
 
2529
			#回傳結果
2530
			return $result;
226 liveuser 2531
 
3 liveuser 2532
			}#if end
226 liveuser 2533
 
3 liveuser 2534
		#如果檢查不通過
2535
		if($checkArguments["passed"]=="false"){
226 liveuser 2536
 
3 liveuser 2537
			#設置執行失敗
2538
			$result["status"]="false";
226 liveuser 2539
 
3 liveuser 2540
			#設置執行錯誤訊息
2541
			$result["error"]=$checkArguments;
2542
 
2543
			#回傳結果
2544
			return $result;
226 liveuser 2545
 
3 liveuser 2546
			}#if end
2547
 
2548
		#初始化儲存要比較的數字陣列
2549
		$outputArray=array();
2550
 
2551
		#初始化技計數的變數
2552
		$count=0;
2553
 
2554
		#取得每個元素的key值
2555
		foreach($conf["rawDataArray"] as $key=>$value){
226 liveuser 2556
 
3 liveuser 2557
			#另存 key
2558
			$outputArray[$count]["key"]=$key;
226 liveuser 2559
 
3 liveuser 2560
			#另存 value
2561
			$outputArray[$count]["value"]=$value;
226 liveuser 2562
 
3 liveuser 2563
			#另存 絕對值過後的數值
2564
			$outputArray[$count]["absValue"]=abs($value);
226 liveuser 2565
 
3 liveuser 2566
			#計數+1
2567
			$count++;
226 liveuser 2568
 
3 liveuser 2569
			}#foreach end
226 liveuser 2570
 
3 liveuser 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"]){
226 liveuser 2581
 
3 liveuser 2582
				#則將較大的數字放進 $max 裏面,
2583
				$min["value"]=$outputArray[$i]["value"];
2584
				$min["key"]=$outputArray[$i]["key"];
2585
				$min["absValue"]=$outputArray[$i]["absValue"];
2586
 
2587
				}#判斷式結束
2588
 
226 liveuser 2589
			}#迴圈結束
2590
 
3 liveuser 2591
		#儲存絕對值後最大值的資訊
2592
		$result["key"]=$min["key"];
2593
		$result["value"]=$min["value"];
2594
		$result["absValue"]=$min["absValue"];
2595
 
226 liveuser 2596
		#設置執行正常
3 liveuser 2597
		$result["status"]="true";
2598
 
2599
		#回傳最大值
2600
		return $result;
2601
 
2602
		}#函式結束
2603
 
2604
	/*
2605
	#函式說明:
2606
	#使用 min-max normalization 來正規化一組數據,結果會回傳一組正規化後的數據,$newDataArray[$i]爲該筆資料的第i筆經過正規化後的數值。
2607
	#回傳結果:
2608
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2609
	#$result["error"],錯誤訊息陣列.
2610
	#$result["function"],當前執行的函數名稱.
2611
	#$result["original"] 爲回傳後的原始數據陣列,$result爲回傳後給與的變數名稱,可自行改變。
2612
	#$result["normalizationed"] 爲正規化後的陣列數據
2613
	#必填參數:
2614
	$conf["rawDataArray"]=array();#爲傳入的原始數據參數.
2615
	#可省略參數:
2616
	#無.
2617
	#參考資料:
2618
	#無.
2619
	#備註:
2620
	#無.
2621
	*/
2622
	public static function minMaxNormalization($conf){
226 liveuser 2623
 
3 liveuser 2624
		#初始化要回傳的內容
2625
		$result=array();
226 liveuser 2626
 
3 liveuser 2627
		#記錄當前執行的函數名稱
2628
		$result["function"]=__FUNCTION__;
2629
 
2630
		#如果 $conf 不為陣列
2631
		if(gettype($conf)!="array"){
226 liveuser 2632
 
3 liveuser 2633
			#設置執行失敗
2634
			$result["status"]="false";
226 liveuser 2635
 
3 liveuser 2636
			#設置執行錯誤訊息
2637
			$result["error"][]="\$conf變數須為陣列形態";
2638
 
2639
			#如果傳入的參數為 null
2640
			if($conf==null){
226 liveuser 2641
 
3 liveuser 2642
				#設置執行錯誤訊息
2643
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2644
 
3 liveuser 2645
				}#if end
2646
 
2647
			#回傳結果
2648
			return $result;
226 liveuser 2649
 
3 liveuser 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");
226 liveuser 2670
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 2679
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 2692
 
3 liveuser 2693
			#設置執行失敗
2694
			$result["status"]="false";
226 liveuser 2695
 
3 liveuser 2696
			#設置執行錯誤訊息
2697
			$result["error"]=$checkArguments;
2698
 
2699
			#回傳結果
2700
			return $result;
226 liveuser 2701
 
3 liveuser 2702
			}#if end
2703
 
2704
		#如果檢查不通過
2705
		if($checkArguments["passed"]=="false"){
226 liveuser 2706
 
3 liveuser 2707
			#設置執行失敗
2708
			$result["status"]="false";
226 liveuser 2709
 
3 liveuser 2710
			#設置執行錯誤訊息
2711
			$result["error"]=$checkArguments;
2712
 
2713
			#回傳結果
2714
			return $result;
226 liveuser 2715
 
3 liveuser 2716
			}#if end
226 liveuser 2717
 
3 liveuser 2718
		#取得最大值
2719
		#回傳結果:
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"]);
226 liveuser 2727
		unset($conf["math"]["getMaxValue"]);
3 liveuser 2728
 
2729
		#如果取得最大值失敗
2730
		if($tempMax["status"]=="false"){
226 liveuser 2731
 
3 liveuser 2732
			#設置執行失敗
2733
			$result["status"]="false";
226 liveuser 2734
 
3 liveuser 2735
			#設置執行錯誤訊息
2736
			$result["error"]=$tempMax;
2737
 
2738
			#回傳結果
2739
			return $result;
226 liveuser 2740
 
3 liveuser 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"]);
226 liveuser 2754
		unset($conf["math"]["getMinValue"]);
2755
 
3 liveuser 2756
		#如果取得最小值失敗
2757
		if($min["status"]=="false"){
226 liveuser 2758
 
3 liveuser 2759
			#設置執行失敗
2760
			$result["status"]="false";
226 liveuser 2761
 
3 liveuser 2762
			#設置執行錯誤訊息
2763
			$result["error"]=$min;
2764
 
2765
			#回傳結果
2766
			return $result;
226 liveuser 2767
 
3 liveuser 2768
			}#if end
226 liveuser 2769
 
2770
		#取得最小值
3 liveuser 2771
		$min=$min["value"];
226 liveuser 2772
 
3 liveuser 2773
		#將每組數據正規化
2774
		for($i=0;$i<count($conf["rawDataArray"]);$i++){
2775
 
2776
			#每筆數據減掉最小值然後再除以最大值減最小值
226 liveuser 2777
			$newDataArray[$i]=($conf["rawDataArray"][$i]-$min)/($max-$min);
3 liveuser 2778
 
2779
			}#迴圈結束
2780
 
2781
		#儲存原始數據
2782
		$result["original"]=$conf["rawDataArray"];
2783
 
2784
		#儲存正規化後的數據
2785
		$result["normalizationed"]=$newDataArray;
2786
 
2787
		#設置執行正常
2788
		$result["status"]="true";
226 liveuser 2789
 
3 liveuser 2790
		#回傳正規化完後的數據
2791
		return $result;
2792
 
2793
		}#函式結束
2794
 
2795
	/*
2796
	#函式說明:
2797
	#求算該值需要10的幾次方去除才會最接近1,但小於1。
2798
	#回傳結果:
2799
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2800
	#$result["error"],錯誤訊息陣列.
2801
	#$result["function"],當前執行的函數名稱.
2802
	#$result["content"],Jvalue,n值需要10的幾次方去除才會最接近1,但小於1.
2803
	#必填參數:
2804
	$conf["num"]="";#字串,爲輸入的數值.
2805
	#可省略參數:
2806
	#無.
2807
	#參考資料:
2808
	#無.
2809
	#備註:
2810
	#無.
2811
	*/
2812
	public static function findJvalue(&$conf){
2813
 
2814
		#初始化要回傳的內容
2815
		$result=array();
226 liveuser 2816
 
3 liveuser 2817
		#記錄當前執行的函數名稱
2818
		$result["function"]=__FUNCTION__;
2819
 
2820
		#初始化 Jvalue
2821
		$result["content"]="";
2822
 
2823
		#如果 $conf 不為陣列
2824
		if(gettype($conf)!="array"){
226 liveuser 2825
 
3 liveuser 2826
			#設置執行失敗
2827
			$result["status"]="false";
226 liveuser 2828
 
3 liveuser 2829
			#設置執行錯誤訊息
2830
			$result["error"][]="\$conf變數須為陣列形態";
2831
 
2832
			#如果傳入的參數為 null
2833
			if($conf==null){
226 liveuser 2834
 
3 liveuser 2835
				#設置執行錯誤訊息
2836
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2837
 
3 liveuser 2838
				}#if end
2839
 
2840
			#回傳結果
2841
			return $result;
226 liveuser 2842
 
3 liveuser 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");
226 liveuser 2863
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 2872
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 2885
 
3 liveuser 2886
			#設置執行失敗
2887
			$result["status"]="false";
226 liveuser 2888
 
3 liveuser 2889
			#設置執行錯誤訊息
2890
			$result["error"]=$checkArguments;
2891
 
2892
			#回傳結果
2893
			return $result;
226 liveuser 2894
 
3 liveuser 2895
			}#if end
226 liveuser 2896
 
3 liveuser 2897
		#如果檢查不通過
2898
		if($checkArguments["passed"]=="false"){
226 liveuser 2899
 
3 liveuser 2900
			#設置執行失敗
2901
			$result["status"]="false";
226 liveuser 2902
 
3 liveuser 2903
			#設置執行錯誤訊息
2904
			$result["error"]=$checkArguments;
2905
 
2906
			#回傳結果
2907
			return $result;
226 liveuser 2908
 
3 liveuser 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){
226 liveuser 2916
 
3 liveuser 2917
				#給與 $jValue 數值
2918
				$result["content"]=$i;
226 liveuser 2919
 
3 liveuser 2920
				#中斷,跳出迴圈
226 liveuser 2921
				break;
3 liveuser 2922
 
2923
				}#判斷式結束
226 liveuser 2924
 
3 liveuser 2925
			}#迴圈結束
2926
 
2927
		#設置執行正常
2928
		$result["status"]="true";
2929
 
2930
		#回傳結果
2931
		return $result;
226 liveuser 2932
 
3 liveuser 2933
		}#funciton findJvalue end
2934
 
2935
	/*
2936
	#函式說明:
2937
	#透過 Decimal scaling 來縮放原始數據
2938
	#回傳結果:
2939
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2940
	#$result["error"],錯誤訊息陣列.
2941
	#$result["function"],當前執行的函數名稱.
2942
	#$result["content"],經過Decimal scaling縮放後的數據陣列.
2943
	#必填參數:
2944
	$conf["rawDataArray"]="";#爲傳入的原始數據參數
2945
	#可省略參數:
2946
	#無.
2947
	#參考資料:
2948
	#無.
2949
	#備註:
2950
	#無.
2951
	*/
2952
	public static function computeDecimalScaling($conf){
2953
 
2954
		#初始化要回傳的內容
2955
		$result=array();
226 liveuser 2956
 
3 liveuser 2957
		#記錄當前執行的函數名稱
2958
		$result["function"]=__FUNCTION__;
2959
 
2960
		#如果 $conf 不為陣列
2961
		if(gettype($conf)!="array"){
226 liveuser 2962
 
3 liveuser 2963
			#設置執行失敗
2964
			$result["status"]="false";
226 liveuser 2965
 
3 liveuser 2966
			#設置執行錯誤訊息
2967
			$result["error"][]="\$conf變數須為陣列形態";
2968
 
2969
			#如果傳入的參數為 null
2970
			if($conf==null){
226 liveuser 2971
 
3 liveuser 2972
				#設置執行錯誤訊息
2973
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2974
 
3 liveuser 2975
				}#if end
2976
 
2977
			#回傳結果
2978
			return $result;
226 liveuser 2979
 
3 liveuser 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");
226 liveuser 3000
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 3009
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 3022
 
3 liveuser 3023
			#設置執行失敗
3024
			$result["status"]="false";
226 liveuser 3025
 
3 liveuser 3026
			#設置執行錯誤訊息
3027
			$result["error"]=$checkArguments;
3028
 
3029
			#回傳結果
3030
			return $result;
226 liveuser 3031
 
3 liveuser 3032
			}#if end
226 liveuser 3033
 
3 liveuser 3034
		#如果檢查不通過
3035
		if($checkArguments["passed"]=="false"){
226 liveuser 3036
 
3 liveuser 3037
			#設置執行失敗
3038
			$result["status"]="false";
226 liveuser 3039
 
3 liveuser 3040
			#設置執行錯誤訊息
3041
			$result["error"]=$checkArguments;
3042
 
3043
			#回傳結果
3044
			return $result;
226 liveuser 3045
 
3 liveuser 3046
			}#if end
3047
 
3048
		#計算資料總筆數
3049
		$dataCounts=count($conf["rawDataArray"]);
3050
 
3051
		#取得該筆資料的絕對值後的最大值
3052
		#回傳結果:
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"){
226 liveuser 3065
 
3 liveuser 3066
			#設置執行失敗
3067
			$result["status"]="false";
226 liveuser 3068
 
3 liveuser 3069
			#設置執行錯誤訊息
3070
			$result["error"]=$maxAbs;
3071
 
3072
			#回傳結果
3073
			return $result;
226 liveuser 3074
 
3 liveuser 3075
			}#if end
226 liveuser 3076
 
3 liveuser 3077
		#取得該筆資料的絕對值後的最大值
3078
		$maxAbs=$maxAbs["absValue"];
3079
 
3080
		#求算最大值需要10的幾次方去除才會最接近1,但小於1。
3081
		#回傳結果:
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"){
226 liveuser 3092
 
3 liveuser 3093
			#設置執行失敗
3094
			$result["status"]="false";
226 liveuser 3095
 
3 liveuser 3096
			#設置執行錯誤訊息
3097
			$result["error"]=$findJvalue;
3098
 
3099
			#回傳結果
3100
			return $result;
226 liveuser 3101
 
3 liveuser 3102
			}#if end
226 liveuser 3103
 
3 liveuser 3104
		#取得jValue
3105
		$jValue=$findJvalue["content"];
3106
 
3107
		#將原始數據進行 Decimal scaling
3108
		for($i=0;$i<count($conf["rawDataArray"]);$i++){
3109
 
3110
			#每筆數除以10的j次方
226 liveuser 3111
			$newDataArray[$i]=$conf["rawDataArray"][$i]/pow(10,$jValue);
3 liveuser 3112
 
226 liveuser 3113
			}#迴圈結束
3 liveuser 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
		#回傳結果
226 liveuser 3125
		return $result;
3126
 
3 liveuser 3127
		}#function computeDecimalScaling end
3128
 
3129
	/*
3130
	#函式說明:
3131
	#將用於統計分析的原始陣列裏面,每筆資料的特定欄位爲0的時候,將該筆樣本踢除
3132
	#回傳結果:
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去排列
3139
	#必填參數:
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();
3144
	#可省略參數:
3145
	#$conf["repeatExecTimeLimitTo"],整數,$conf["varArray"]底下的陣列,每執行一次後要重新給與多少執行時間,預設為 php.ini 的max_execution_time.
3146
	#$conf["repeatExecTimeLimitTo"]=ini_get("max_execution_time");
3147
	#參考資料:
3148
	#無.
3149
	#備註:
3150
	#若資料量大,則建議在command line環境執行.
3151
	*/
3152
	public static function eraseContainZeroData(&$conf){
3153
 
3154
		#初始化要回傳的內容
3155
		$result=array();
226 liveuser 3156
 
3 liveuser 3157
		#記錄當前執行的函數名稱
3158
		$result["function"]=__FUNCTION__;
3159
 
3160
		#如果 $conf 不為陣列
3161
		if(gettype($conf)!="array"){
226 liveuser 3162
 
3 liveuser 3163
			#設置執行失敗
3164
			$result["status"]="false";
226 liveuser 3165
 
3 liveuser 3166
			#設置執行錯誤訊息
3167
			$result["error"][]="\$conf變數須為陣列形態";
3168
 
3169
			#如果傳入的參數為 null
3170
			if($conf==null){
226 liveuser 3171
 
3 liveuser 3172
				#設置執行錯誤訊息
3173
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 3174
 
3 liveuser 3175
				}#if end
3176
 
3177
			#回傳結果
3178
			return $result;
226 liveuser 3179
 
3 liveuser 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");
226 liveuser 3200
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 3209
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 3222
 
3 liveuser 3223
			#設置執行失敗
3224
			$result["status"]="false";
226 liveuser 3225
 
3 liveuser 3226
			#設置執行錯誤訊息
3227
			$result["error"]=$checkArguments;
3228
 
3229
			#回傳結果
3230
			return $result;
226 liveuser 3231
 
3 liveuser 3232
			}#if end
226 liveuser 3233
 
3 liveuser 3234
		#如果檢查不通過
3235
		if($checkArguments["passed"]=="false"){
226 liveuser 3236
 
3 liveuser 3237
			#設置執行失敗
3238
			$result["status"]="false";
226 liveuser 3239
 
3 liveuser 3240
			#設置執行錯誤訊息
3241
			$result["error"]=$checkArguments;
3242
 
3243
			#回傳結果
3244
			return $result;
226 liveuser 3245
 
3 liveuser 3246
			}#if end
226 liveuser 3247
 
3 liveuser 3248
		#有幾筆資料就執行幾次
3249
		for($i=0;$i<count($conf["varArray"]);$i++){
226 liveuser 3250
 
3 liveuser 3251
			#初始化要不要捨棄該筆資料的變數
3252
			$drop="false";
226 liveuser 3253
 
3 liveuser 3254
			#針對第$i+1列
3255
			foreach($conf["varArray"][$i] as $questName=>$questVal){
226 liveuser 3256
 
3 liveuser 3257
				#函式說明:
3258
				#檢查某個元素是否存在於該一維陣列變數裏面
3259
				#回傳結果:
3260
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3261
				#$reuslt["error"],執行不正常結束的錯訊息陣列.
3262
				#$result["function"],當前執行的函式名稱.
3263
				#$result["founded"],"true",表示該元素已經存在於該一維陣列變數裏面,"false"表示該元素不存在於該一維陣列變數裏面.
3264
				#必填寫的參數:
3265
				$conf["variableCheck"]["checkElementExistFromAnArray"]["searchString"]=$questName;#要搜尋的元素內容
226 liveuser 3266
				$conf["variableCheck"]["checkElementExistFromAnArray"]["searchArray"]=$conf["checkedColumn"];#要搜尋的陣列變數
3 liveuser 3267
				$checkResult=variableCheck::checkElementExistFromAnArray($conf["variableCheck"]["checkElementExistFromAnArray"]);
3268
				unset($conf["variableCheck"]["checkElementExistFromAnArray"]);
3269
 
3270
				#如果檢查失敗
3271
				if($checkResult["status"]=="false"){
226 liveuser 3272
 
3 liveuser 3273
					#設置執行失敗
3274
					$result["status"]="false";
226 liveuser 3275
 
3 liveuser 3276
					#設置執行錯誤訊息
3277
					$result["error"]=$checkResult;
3278
 
3279
					#回傳結果
3280
					return $result;
226 liveuser 3281
 
3 liveuser 3282
					}#if end
3283
 
3284
				#如果是要檢查的欄位
3285
				if($checkResult["founded"]==="true"){
3286
 
3287
					#如果值等於 0
3288
					if($questVal===0 || $questVal==="0"){
226 liveuser 3289
 
3 liveuser 3290
						#標記該筆樣本要捨棄
3291
						$drop="true";
226 liveuser 3292
 
3 liveuser 3293
						#跳出foreach
3294
						break;
226 liveuser 3295
 
3296
						}#if end
3297
 
3 liveuser 3298
					}#if end
3299
 
3300
				}#foreache end
226 liveuser 3301
 
3 liveuser 3302
			#如果沒有要捨棄該樣本標記
3303
			if($drop!="true"){
3304
 
3305
				#取得該筆資料
3306
				$result["content"][]=$conf["varArray"][$i];
3307
 
3308
				}#if end
226 liveuser 3309
 
3 liveuser 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"]);
226 liveuser 3323
 
3 liveuser 3324
			#如果執行失敗
3325
			if($delayRunTimeExectionMax["status"]==="false"){
226 liveuser 3326
 
3 liveuser 3327
				#設定類別圖繪製失敗
226 liveuser 3328
				$result["status"]="false";
3329
 
3 liveuser 3330
				#設定該檔案的類別圖繪製失敗提示
3331
				$result["error"]=$delayRunTimeExectionMax;
226 liveuser 3332
 
3 liveuser 3333
				#回傳結果
3334
				return $result;
3335
 
226 liveuser 3336
				}#if end
3337
 
3 liveuser 3338
			}#for end
3339
 
3340
		#設置執行正常
3341
		$result["status"]="true";
3342
 
3343
		#回傳結果
3344
		return $result;
3345
 
3346
		}#funciton eraseContainZeroData end
226 liveuser 3347
 
3 liveuser 3348
	/*
3349
	#函式說明:
3350
	#將陣列裡面小於等於自己的正整數或大於等於自己的負整數
3351
	#回傳結果:
3352
	#$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
3353
	#$result["error"],錯誤訊息陣列.
3354
	#$result["function"],當前執行的函數名稱.
3355
	#$result["content"],處理好的整數陣列.
3356
	#必填參數:
3357
	#$conf["inputArray"],字串陣列,要取整數的數字陣列.
3358
	$conf["inputArray"]=array();
3359
	#可省略參數:
3360
	#無
3361
	#參考資料:
3362
	#http://tw2.php.net/manual/en/function.round.php
3363
	#備註:
3364
	#無.
226 liveuser 3365
	*/
3 liveuser 3366
	public static function changeToIntValue(&$conf){
226 liveuser 3367
 
3 liveuser 3368
		#初始化要回傳的內容
3369
		$result=array();
226 liveuser 3370
 
3 liveuser 3371
		#記錄當前執行的函數名稱
3372
		$result["function"]=__FUNCTION__;
3373
 
3374
		#如果 $conf 不為陣列
3375
		if(gettype($conf)!="array"){
226 liveuser 3376
 
3 liveuser 3377
			#設置執行失敗
3378
			$result["status"]="false";
226 liveuser 3379
 
3 liveuser 3380
			#設置執行錯誤訊息
3381
			$result["error"][]="\$conf變數須為陣列形態";
3382
 
3383
			#如果傳入的參數為 null
3384
			if($conf==null){
226 liveuser 3385
 
3 liveuser 3386
				#設置執行錯誤訊息
3387
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 3388
 
3 liveuser 3389
				}#if end
3390
 
3391
			#回傳結果
3392
			return $result;
226 liveuser 3393
 
3 liveuser 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");
226 liveuser 3414
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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");
226 liveuser 3423
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 3436
 
3 liveuser 3437
			#設置執行失敗
3438
			$result["status"]="false";
226 liveuser 3439
 
3 liveuser 3440
			#設置執行錯誤訊息
3441
			$result["error"]=$checkArguments;
3442
 
3443
			#回傳結果
3444
			return $result;
226 liveuser 3445
 
3 liveuser 3446
			}#if end
226 liveuser 3447
 
3 liveuser 3448
		#如果檢查不通過
3449
		if($checkArguments["passed"]=="false"){
226 liveuser 3450
 
3 liveuser 3451
			#設置執行失敗
3452
			$result["status"]="false";
226 liveuser 3453
 
3 liveuser 3454
			#設置執行錯誤訊息
3455
			$result["error"]=$checkArguments;
3456
 
3457
			#回傳結果
3458
			return $result;
226 liveuser 3459
 
3 liveuser 3460
			}#if end
226 liveuser 3461
 
3 liveuser 3462
		#針對每個數字陣列元素
3463
		foreach($conf["inputArray"] as $numKey=>$numValue){
226 liveuser 3464
 
3 liveuser 3465
			#取成小於等於$numValue的正整數,與大於等於$numValue的負整數
3466
			$numValue=round($numValue,0,PHP_ROUND_HALF_EVEN);
226 liveuser 3467
 
3 liveuser 3468
			#轉換為 int 型別,並存在原始以key為名的陣列中
3469
			$result["content"][$numKey]=$numValue;
226 liveuser 3470
 
3 liveuser 3471
			}#foreach end
226 liveuser 3472
 
3 liveuser 3473
		#設置執行成功的識別
3474
		$result["status"]="true";
226 liveuser 3475
 
3 liveuser 3476
		#回傳結果
3477
		return $result;
226 liveuser 3478
 
3479
		}#function changeToIntValue end
3480
 
3 liveuser 3481
	/*
226 liveuser 3482
	#函式說明:
3 liveuser 3483
	#亂數產生特定陣列裡面的內容
3484
	#回傳結果:
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
	#無
3495
	#參考資料:
3496
	#無.
3497
	#備註:
3498
	#無.
3499
	*/
3500
	public static function randomFromArray($conf){
226 liveuser 3501
 
3 liveuser 3502
		#初始化要回傳的內容
3503
		$result=array();
226 liveuser 3504
 
3 liveuser 3505
		#記錄當前執行的函數名稱
3506
		$result["function"]=__FUNCTION__;
3507
 
3508
		#如果 $conf 不為陣列
3509
		if(gettype($conf)!="array"){
226 liveuser 3510
 
3 liveuser 3511
			#設置執行失敗
3512
			$result["status"]="false";
226 liveuser 3513
 
3 liveuser 3514
			#設置執行錯誤訊息
3515
			$result["error"][]="\$conf變數須為陣列形態";
3516
 
3517
			#如果傳入的參數為 null
3518
			if($conf==null){
226 liveuser 3519
 
3 liveuser 3520
				#設置執行錯誤訊息
3521
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 3522
 
3 liveuser 3523
				}#if end
3524
 
3525
			#回傳結果
3526
			return $result;
226 liveuser 3527
 
3 liveuser 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");
226 liveuser 3548
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 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();
226 liveuser 3557
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 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"){
226 liveuser 3570
 
3 liveuser 3571
			#設置執行失敗
3572
			$result["status"]="false";
226 liveuser 3573
 
3 liveuser 3574
			#設置執行錯誤訊息
3575
			$result["error"]=$checkArguments;
3576
 
3577
			#回傳結果
3578
			return $result;
226 liveuser 3579
 
3 liveuser 3580
			}#if end
3581
 
3582
		#如果檢查不通過
3583
		if($checkArguments["passed"]=="false"){
226 liveuser 3584
 
3 liveuser 3585
			#設置執行失敗
3586
			$result["status"]="false";
226 liveuser 3587
 
3 liveuser 3588
			#設置執行錯誤訊息
3589
			$result["error"]=$checkArguments;
3590
 
3591
			#回傳結果
3592
			return $result;
226 liveuser 3593
 
3 liveuser 3594
			}#if end
226 liveuser 3595
 
3 liveuser 3596
		#取得用於隨機產生的元素數目
3597
		$randomCount=\count($conf["randomArray"]);
226 liveuser 3598
 
3 liveuser 3599
		#產生的亂數
3600
		$number=\rand(0,$randomCount-1);
226 liveuser 3601
 
3 liveuser 3602
		#取得產生出來的亂數
3603
		$result["content"]["key"]=$number;
3604
 
3605
		#取得亂數對應的內容
3606
		$result["content"]["value"]=$conf["randomArray"][$number];
226 liveuser 3607
 
3 liveuser 3608
		#設置執行成功
3609
		$result["status"]="true";
226 liveuser 3610
 
3 liveuser 3611
		#回傳結果
3612
		return $result;
226 liveuser 3613
 
3 liveuser 3614
		}#function randomFromArray end
3615
 
3616
	/*
226 liveuser 3617
	#函式說明:
218 liveuser 3618
	#亂數產生特定陣列裡面的內容,可以多次產生並回傳結果.
3619
	#回傳結果:
3620
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3621
	#$result["function"],當前執行的函數名稱.
3622
	#$result["error"],錯誤訊息陣列.
3623
	#$result["argu"],使用的參數.
3624
	#$result["content"]["name"][$i],陣列,產生的第$n+1個元素在$conf["randomArray"]裡面的key是?
3625
	#$result["content"]["value"][$i],陣列,產生的第$n+1個元素內容.
3626
	#$result["content"]["str"],字串,產生的內容透過字串方式串接的結果.
3627
	#必填參數:
3628
	#$conf["randomArray"],字串陣列,要隨機產生的元素.
3629
	$conf["randomArray"]=array();
3630
	#可省略參數:
3631
	#$conf["repeatTime"],字串整數,要產生幾次,預設為"1"次.
3632
	#$conf["repeatTime"]="1";
3633
	#參考資料:
3634
	#無.
3635
	#備註:
3636
	#無.
3637
	*/
3638
	public static function randomFromArrayManyTimes(&$conf){
226 liveuser 3639
 
218 liveuser 3640
		#初始化要回傳的內容
3641
		$result=array();
226 liveuser 3642
 
218 liveuser 3643
		#記錄當前執行的函數名稱
3644
		$result["function"]=__FUNCTION__;
3645
 
3646
		#如果 $conf 不為陣列
3647
		if(gettype($conf)!="array"){
226 liveuser 3648
 
218 liveuser 3649
			#設置執行失敗
3650
			$result["status"]="false";
226 liveuser 3651
 
218 liveuser 3652
			#設置執行錯誤訊息
3653
			$result["error"][]="\$conf變數須為陣列形態";
3654
 
3655
			#如果傳入的參數為 null
3656
			if($conf==null){
226 liveuser 3657
 
218 liveuser 3658
				#設置執行錯誤訊息
3659
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 3660
 
218 liveuser 3661
				}#if end
3662
 
3663
			#回傳結果
3664
			return $result;
226 liveuser 3665
 
218 liveuser 3666
			}#if end
226 liveuser 3667
 
218 liveuser 3668
		#取得使用的參數
3669
		$result["argu"]=$conf;
226 liveuser 3670
 
218 liveuser 3671
		#初始化記錄字串串接後的結果
3672
		$result["content"]["str"]="";
226 liveuser 3673
 
218 liveuser 3674
		#函式說明:
3675
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
3676
		#回傳結果:
3677
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3678
		#$result["error"],執行不正常結束的錯訊息陣列.
3679
		#$result["simpleError"],簡單表示的錯誤訊息.
3680
		#$result["function"],當前執行的函式名稱.
3681
		#$result["argu"],設置給予的參數.
3682
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3683
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3684
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3685
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
3686
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
3687
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3688
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3689
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3690
		#必填參數:
3691
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3692
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3693
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3694
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3695
		#可省略參數:
3696
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3697
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("randomArray");
3698
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
3699
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
3700
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
3701
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3702
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
3703
		#$conf["canNotBeEmpty"]=array();
3704
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
3705
		#$conf["canBeEmpty"]=array();
3706
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3707
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("repeatTime");
3708
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3709
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("repeatTime");
3710
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3711
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
3712
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3713
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1");
3714
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3715
		#$conf["disallowAllSkipableVarIsEmpty"]="";
3716
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
3717
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
3718
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
3719
		#$conf["disallowAllSkipableVarNotExist"]="";
3720
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3721
		#$conf["arrayCountEqualCheck"][]=array();
3722
		#參考資料:
3723
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3724
		#備註:
3725
		#無.
3726
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3727
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 3728
 
218 liveuser 3729
		#如果檢查參數失敗
3730
		if($checkArguments["status"]=="false"){
226 liveuser 3731
 
218 liveuser 3732
			#設置執行失敗
3733
			$result["status"]="false";
226 liveuser 3734
 
218 liveuser 3735
			#設置執行錯誤訊息
3736
			$result["error"]=$checkArguments;
3737
 
3738
			#回傳結果
3739
			return $result;
226 liveuser 3740
 
218 liveuser 3741
			}#if end
3742
 
3743
		#如果檢查不通過
3744
		if($checkArguments["passed"]=="false"){
226 liveuser 3745
 
218 liveuser 3746
			#設置執行失敗
3747
			$result["status"]="false";
226 liveuser 3748
 
218 liveuser 3749
			#設置執行錯誤訊息
3750
			$result["error"]=$checkArguments;
3751
 
3752
			#回傳結果
3753
			return $result;
226 liveuser 3754
 
218 liveuser 3755
			}#if end
226 liveuser 3756
 
218 liveuser 3757
		#執行 $conf["repeatTime"] 數
3758
		for($i=0;$i<$conf["repeatTime"];$i++){
226 liveuser 3759
 
3760
			#函式說明:
218 liveuser 3761
			#亂數產生特定陣列裡面的內容
3762
			#回傳結果:
3763
			#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3764
			#$result["function"],當前執行的函數名稱.
3765
			#$result["error"],錯誤訊息陣列.
3766
			#$result["content"]["name"],產生的元素在$conf["randomArray"]裡面的key是?
3767
			#$result["content"]["value"],產生的元素內容.
3768
			#必填參數:
3769
			#$conf["randomArray"],字串陣列,要隨機產生的元素.
3770
			$conf["math::randomFromArray"]["randomArray"]=$conf["randomArray"];
3771
			#可省略參數:
3772
			#無
3773
			#參考資料:
3774
			#無.
3775
			#備註:
3776
			#無.
3777
			$randomFromArray=math::randomFromArray($conf["math::randomFromArray"]);
3778
			unset($conf["math::randomFromArray"]);
226 liveuser 3779
 
218 liveuser 3780
			#如果執行異常
3781
			if($randomFromArray["status"]=="false"){
226 liveuser 3782
 
218 liveuser 3783
				#設置執行失敗
3784
				$result["status"]="false";
226 liveuser 3785
 
218 liveuser 3786
				#設置執行錯誤訊息
3787
				$result["error"]=$randomFromArray;
3788
 
3789
				#回傳結果
3790
				return $result;
226 liveuser 3791
 
218 liveuser 3792
				}#if end
226 liveuser 3793
 
218 liveuser 3794
			#取得該次產生元素的key
3795
			$result["content"]["name"][]=$randomFromArray["content"]["name"];
226 liveuser 3796
 
218 liveuser 3797
			#取得該次產生元素的value
3798
			$result["content"]["value"][]=$randomFromArray["content"]["value"];
226 liveuser 3799
 
218 liveuser 3800
			#串接該次產生元素的value
3801
			$result["content"]["str"]=$result["content"]["str"].$randomFromArray["content"]["value"];
226 liveuser 3802
 
218 liveuser 3803
			}#for end
226 liveuser 3804
 
218 liveuser 3805
		#設置結果正常
3806
		$result["status"]="true";
226 liveuser 3807
 
218 liveuser 3808
		#回傳結果
3809
		return $result;
226 liveuser 3810
 
218 liveuser 3811
		}#function randomFromArrayManyTimes end
3812
 
3813
	/*
226 liveuser 3814
	#函式說明:
3 liveuser 3815
	#左方數值範圍要對應的右方數值範圍
3816
	#回傳結果:
3817
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3818
	#$result["function"],當前執行的函數名稱.
3819
	#$result["error"],錯誤訊息陣列.
3820
	#$result["argu"],使用的參數.
3821
	#$result["content"],左邊數值對應右邊數值的對照表.
3822
	#必填參數:
3823
	#$conf["rangeF"],整數陣列,要產生對應表的左手方
3824
	$conf["rangeF"]=array();
3825
	#可省略參數:
3826
	#$conf["rangeT"],整數陣列,要產生對應表的右手方,預設為0到100的整數.
3827
	#$conf["rangeT"]=array();
3828
	#參考資料:
3829
	#無.
3830
	#備註:
3831
	#無.
3832
	*/
3833
	public static function key2value($conf){
226 liveuser 3834
 
3 liveuser 3835
		#初始化要回傳的內容
3836
		$result=array();
226 liveuser 3837
 
3 liveuser 3838
		#記錄當前執行的函數名稱
3839
		$result["function"]=__FUNCTION__;
3840
 
3841
		#如果 $conf 不為陣列
3842
		if(gettype($conf)!="array"){
226 liveuser 3843
 
3 liveuser 3844
			#設置執行失敗
3845
			$result["status"]="false";
226 liveuser 3846
 
3 liveuser 3847
			#設置執行錯誤訊息
3848
			$result["error"][]="\$conf變數須為陣列形態";
3849
 
3850
			#如果傳入的參數為 null
3851
			if($conf==null){
226 liveuser 3852
 
3 liveuser 3853
				#設置執行錯誤訊息
3854
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 3855
 
3 liveuser 3856
				}#if end
3857
 
3858
			#回傳結果
3859
			return $result;
226 liveuser 3860
 
3 liveuser 3861
			}#if end
3862
 
3863
		#取得使用的參數
3864
		$result["argu"]=$conf;
3865
 
3866
		#檢查參數
3867
		#函式說明:
3868
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3869
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3870
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3871
		#$result["function"],當前執行的函式名稱.
3872
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3873
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3874
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3875
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3876
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3877
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3878
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3879
		#必填寫的參數:
3880
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3881
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3882
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3883
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rangeF");
226 liveuser 3884
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 3885
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
3886
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3887
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3888
		#可以省略的參數:
3889
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3890
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3891
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3892
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("rangeT");
226 liveuser 3893
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 3894
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3895
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3896
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3897
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3898
		#$conf["arrayCountEqualCheck"][]=array();
3899
		#參考資料來源:
3900
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3901
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3902
		unset($conf["variableCheck::checkArguments"]);
3903
 
3904
		#如果檢查參數失敗
3905
		if($checkArguments["status"]=="false"){
226 liveuser 3906
 
3 liveuser 3907
			#設置執行失敗
3908
			$result["status"]="false";
226 liveuser 3909
 
3 liveuser 3910
			#設置執行錯誤訊息
3911
			$result["error"]=$checkArguments;
3912
 
3913
			#回傳結果
3914
			return $result;
226 liveuser 3915
 
3 liveuser 3916
			}#if end
3917
 
3918
		#如果檢查不通過
3919
		if($checkArguments["passed"]=="false"){
226 liveuser 3920
 
3 liveuser 3921
			#設置執行失敗
3922
			$result["status"]="false";
226 liveuser 3923
 
3 liveuser 3924
			#設置執行錯誤訊息
3925
			$result["error"]=$checkArguments;
3926
 
3927
			#回傳結果
3928
			return $result;
226 liveuser 3929
 
3 liveuser 3930
			}#if end
226 liveuser 3931
 
3 liveuser 3932
		#如果右手方對應的整數陣列不存在
3933
		if(!isset($conf["rangeT"])){
226 liveuser 3934
 
3 liveuser 3935
			#跑101次
3936
			for($i=0;$i<=100;$i++){
226 liveuser 3937
 
3 liveuser 3938
				#設置rangeT
3939
				$conf["rangeT"][]=$i;
226 liveuser 3940
 
3 liveuser 3941
				}#for end
226 liveuser 3942
 
3 liveuser 3943
			}#if end
226 liveuser 3944
 
3 liveuser 3945
		#取得左手邊的數值數目
3946
		$rangeFc=count($conf["rangeF"]);
226 liveuser 3947
 
3 liveuser 3948
		#取得右手邊的數值數目
3949
		$rangeTc=count($conf["rangeT"]);
226 liveuser 3950
 
3 liveuser 3951
		#一單位的 $rangeTc 等於多少 $rangeFc
3952
		$tPerunitF=$rangeTc/$rangeFc;
3953
 
3954
		#針對每個 $rangeFc
3955
		for($i=0;$i<$rangeFc;$i++){
226 liveuser 3956
 
3 liveuser 3957
			#設置轉換的結果
3958
			$result["content"][$conf["rangeF"][$i]]=$tPerunitF*$i+$conf["rangeT"][0];
226 liveuser 3959
 
3 liveuser 3960
			#轉換後的數值不能超過左手邊的最大值
3961
			if($result["content"][$conf["rangeF"][$i]]>$conf["rangeT"][count($conf["rangeT"])-1]){
226 liveuser 3962
 
3 liveuser 3963
				#防止左手邊的最大數值
3964
				$result["content"][$conf["rangeF"][$i]]=$conf["rangeT"][count($conf["rangeT"])-1];
226 liveuser 3965
 
3 liveuser 3966
				}#if end
226 liveuser 3967
 
3 liveuser 3968
			}#for end
3969
 
3970
		#初始化執行正常
3971
		$result["status"]="true";
226 liveuser 3972
 
3 liveuser 3973
		#回傳結果
3974
		return $result;
226 liveuser 3975
 
3 liveuser 3976
		}#function key2value end
226 liveuser 3977
 
3 liveuser 3978
	/*
226 liveuser 3979
	#函式說明:
3 liveuser 3980
	#數值對應的key
3981
	#回傳結果:
3982
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
3983
	#$result["function"],當前執行的函數名稱.
3984
	#$result["error"],錯誤訊息陣列.
3985
	#$result["argu"],使用的參數.
3986
	#$result["content"],數值對應的左手邊數值.
3987
	#必填參數:
3988
	#$conf["value"],浮點數,要尋找對應的數值.
3989
	$conf["value"]=;
3990
	#$conf["reference"],整數陣列,透過math::key2value產生的對照表.
3991
	$conf["reference"]=array();
3992
	#可省略參數:
3993
	#無.
3994
	#參考資料:
3995
	#無.
3996
	#備註:
3997
	#無.
3998
	*/
3999
	public static function value2key($conf){
4000
 
4001
		#初始化要回傳的內容
4002
		$result=array();
226 liveuser 4003
 
3 liveuser 4004
		#記錄當前執行的函數名稱
4005
		$result["function"]=__FUNCTION__;
4006
 
4007
		#如果 $conf 不為陣列
4008
		if(gettype($conf)!="array"){
226 liveuser 4009
 
3 liveuser 4010
			#設置執行失敗
4011
			$result["status"]="false";
226 liveuser 4012
 
3 liveuser 4013
			#設置執行錯誤訊息
4014
			$result["error"][]="\$conf變數須為陣列形態";
4015
 
4016
			#如果傳入的參數為 null
4017
			if($conf==null){
226 liveuser 4018
 
3 liveuser 4019
				#設置執行錯誤訊息
4020
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 4021
 
3 liveuser 4022
				}#if end
4023
 
4024
			#回傳結果
4025
			return $result;
226 liveuser 4026
 
3 liveuser 4027
			}#if end
4028
 
4029
		#取得使用的參數
4030
		$result["argu"]=$conf;
4031
 
4032
		#檢查參數
4033
		#函式說明:
4034
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4035
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4036
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4037
		#$result["function"],當前執行的函式名稱.
4038
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4039
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4040
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4041
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4042
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4043
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4044
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4045
		#必填寫的參數:
4046
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4047
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4048
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4049
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("value","reference");
226 liveuser 4050
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 4051
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("double","array");
4052
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4053
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4054
		#可以省略的參數:
4055
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4056
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4057
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4058
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("rangeT");
226 liveuser 4059
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 4060
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
4061
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4062
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
4063
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4064
		#$conf["arrayCountEqualCheck"][]=array();
4065
		#參考資料來源:
4066
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4067
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4068
		unset($conf["variableCheck::checkArguments"]);
4069
 
4070
		#如果檢查參數失敗
4071
		if($checkArguments["status"]=="false"){
226 liveuser 4072
 
3 liveuser 4073
			#設置執行失敗
4074
			$result["status"]="false";
226 liveuser 4075
 
3 liveuser 4076
			#設置執行錯誤訊息
4077
			$result["error"]=$checkArguments;
4078
 
4079
			#回傳結果
4080
			return $result;
226 liveuser 4081
 
3 liveuser 4082
			}#if end
4083
 
4084
		#如果檢查不通過
4085
		if($checkArguments["passed"]=="false"){
226 liveuser 4086
 
3 liveuser 4087
			#設置執行失敗
4088
			$result["status"]="false";
226 liveuser 4089
 
3 liveuser 4090
			#設置執行錯誤訊息
4091
			$result["error"]=$checkArguments;
4092
 
4093
			#回傳結果
4094
			return $result;
226 liveuser 4095
 
3 liveuser 4096
			}#if end
4097
 
4098
		#儲存最後發現小於 $value 的 key
4099
		$lastKey=0;
226 liveuser 4100
 
3 liveuser 4101
		#儲存最後發現小於 $value 的 valueInKey
4102
		$lastValue=0;
226 liveuser 4103
 
3 liveuser 4104
		#儲存最先發現大於 $value 的 key
4105
		$thisKey=0;
226 liveuser 4106
 
3 liveuser 4107
		#儲存最先發現大於 $value 的 valueInKey
4108
		$thisValue=0;
4109
 
4110
		#針對每個參照數值
4111
		foreach($conf["reference"] as $key=>$value){
226 liveuser 4112
 
3 liveuser 4113
		 	#如果要查的數值大於當前對應的 $key
4114
		 	if($conf["value"]>$value){
226 liveuser 4115
 
3 liveuser 4116
		 		#儲存最後發現小於 $value 的 key
4117
				$lastKey=$key;
226 liveuser 4118
 
3 liveuser 4119
				#儲存最後發現小於 $value 的 valueInKey
4120
				$lastValue=$value;
226 liveuser 4121
 
3 liveuser 4122
				#如果已經是最後一個數值了
4123
				if($key===count($conf["reference"])-1){
226 liveuser 4124
 
3 liveuser 4125
					#儲存最先發現大於 $value 的 key
4126
					$thisKey=$key;
226 liveuser 4127
 
3 liveuser 4128
					#儲存最先發現大於 $value 的 valueInKey
4129
					$thisValue=$value;
226 liveuser 4130
 
4131
					}#if end
4132
 
3 liveuser 4133
		 		#繼續執行
4134
		 		continue;
226 liveuser 4135
 
4136
		 		}#if end
4137
 
3 liveuser 4138
		 	#反之
4139
		 	else{
226 liveuser 4140
 
3 liveuser 4141
		 		#儲存最先發現大於 $value 的 key
4142
				$thisKey=$key;
226 liveuser 4143
 
3 liveuser 4144
				#儲存最先發現大於 $value 的 valueInKey
4145
				$thisValue=$value;
226 liveuser 4146
 
3 liveuser 4147
		 		#跳出 foreach
4148
		 		break;
226 liveuser 4149
 
4150
		 		}#else end
4151
 
3 liveuser 4152
		 	}#foreach end
4153
 
4154
		#取得要計算數值對於上個value的差距
4155
		$rangeLeft=$value-$lastValue;
226 liveuser 4156
 
3 liveuser 4157
		#取得要計算數值對於下個value的差距
4158
		$rangeRight=$thisValue-$value;
226 liveuser 4159
 
3 liveuser 4160
		#如果比較靠近上個數值
4161
		if($rangeLeft<$rangeRight){
226 liveuser 4162
 
3 liveuser 4163
			#設置結果為上個 key
4164
			$result["content"]=$lastKey;
226 liveuser 4165
 
3 liveuser 4166
			}#if end
226 liveuser 4167
 
4168
		#反之
3 liveuser 4169
		else{
4170
			#設置結果為下個 key
4171
			$result["content"]=$thisKey;
226 liveuser 4172
 
3 liveuser 4173
			}#else end
226 liveuser 4174
 
3 liveuser 4175
		#設置執行正常
4176
		$result["status"]="true";
226 liveuser 4177
 
3 liveuser 4178
		#回傳結果
4179
		return $result;
4180
 
4181
		}#function value2key end
226 liveuser 4182
 
3 liveuser 4183
	/*
4184
	#函式說明:
4185
	#建立一對一的數值對照表,左右都對應到整數值.
4186
	#回傳結果:
4187
	#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4188
	#$result["function"],當前執行的函數名稱.
4189
	#$result["error"],錯誤訊息陣列.
4190
	#$result["argu"],使用的參數.
4191
	#$result["content"],由左至右的數值對應表
4192
	#必填參數
4193
	#$conf["rangeF"],整數陣列,要產生對應表的左手方範圍,$conf["rangeF"]["s"]為左手邊的起始範圍,$conf["rangeF"]["e"]為左手邊的結束範圍.
4194
	$conf["rangeF"]=array("s"=>0,"e"=>100);
4195
	#$conf["rangeT"],整數陣列,要產生對應表的右手方範圍,$conf["rangeT"]["s"]為右手邊的起始範圍,$conf["rangeT"]["e"]為右手邊的結束範圍.
4196
	$conf["rangeT"]=array('s'=>0,"e"=>255);
4197
	#可省略參數:
4198
	#無.
4199
	#參考資料:
4200
	#無.
4201
	#備註:
4202
	#無.
4203
	*/
4204
	public static function fixedKeyToValueReversed(&$conf=array()){
226 liveuser 4205
 
3 liveuser 4206
		#初始化要回傳的內容
4207
		$result=array();
226 liveuser 4208
 
3 liveuser 4209
		#記錄當前執行的函數名稱
4210
		$result["function"]=__FUNCTION__;
4211
 
4212
		#如果 $conf 不為陣列
4213
		if(gettype($conf)!="array"){
226 liveuser 4214
 
3 liveuser 4215
			#設置執行失敗
4216
			$result["status"]="false";
226 liveuser 4217
 
3 liveuser 4218
			#設置執行錯誤訊息
4219
			$result["error"][]="\$conf變數須為陣列形態";
4220
 
4221
			#如果傳入的參數為 null
4222
			if($conf==null){
226 liveuser 4223
 
3 liveuser 4224
				#設置執行錯誤訊息
4225
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 4226
 
3 liveuser 4227
				}#if end
4228
 
4229
			#回傳結果
4230
			return $result;
226 liveuser 4231
 
3 liveuser 4232
			}#if end
4233
 
4234
		#取得使用的參數
4235
		$result["argu"]=$conf;
4236
 
4237
		#檢查參數
4238
		#函式說明:
4239
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4240
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4241
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4242
		#$result["function"],當前執行的函式名稱.
4243
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4244
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4245
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4246
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4247
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4248
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4249
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4250
		#必填寫的參數:
4251
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4252
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4253
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4254
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rangeF","rangeT");
226 liveuser 4255
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 4256
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
4257
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4258
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4259
		#可以省略的參數:
4260
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4261
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4262
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4263
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("rangeT");
226 liveuser 4264
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 4265
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
4266
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4267
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
4268
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4269
		#$conf["arrayCountEqualCheck"][]=array();
4270
		#參考資料來源:
4271
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4272
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4273
		unset($conf["variableCheck::checkArguments"]);
4274
 
4275
		#如果檢查參數失敗
4276
		if($checkArguments["status"]=="false"){
226 liveuser 4277
 
3 liveuser 4278
			#設置執行失敗
4279
			$result["status"]="false";
226 liveuser 4280
 
3 liveuser 4281
			#設置執行錯誤訊息
4282
			$result["error"]=$checkArguments;
4283
 
4284
			#回傳結果
4285
			return $result;
226 liveuser 4286
 
3 liveuser 4287
			}#if end
4288
 
4289
		#如果檢查不通過
4290
		if($checkArguments["passed"]=="false"){
226 liveuser 4291
 
3 liveuser 4292
			#設置執行失敗
4293
			$result["status"]="false";
226 liveuser 4294
 
3 liveuser 4295
			#設置執行錯誤訊息
4296
			$result["error"]=$checkArguments;
4297
 
4298
			#回傳結果
4299
			return $result;
226 liveuser 4300
 
3 liveuser 4301
			}#if end
226 liveuser 4302
 
3 liveuser 4303
		#檢查參數
4304
		if( !isset($conf["rangeF"]["s"]) || !isset($conf["rangeF"]["e"])){
226 liveuser 4305
 
3 liveuser 4306
			#不通過檢查,設定執行錯誤
4307
			$result["error"][]="參數 \$conf[\"rangeF\"][\"s\"] 與 \$conf[\"rangeF\"][\"s\"] 必填";
226 liveuser 4308
 
3 liveuser 4309
			#設置執行失敗
4310
			$result["status"]="error";
226 liveuser 4311
 
3 liveuser 4312
			#回傳結果
4313
			return $result;
226 liveuser 4314
 
3 liveuser 4315
			}#if end
226 liveuser 4316
 
3 liveuser 4317
		#檢查參數
4318
		if( !isset($conf["rangeT"]["s"]) || !isset($conf["rangeT"]["e"])){
226 liveuser 4319
 
3 liveuser 4320
			#不通過檢查,設定執行錯誤
4321
			$result["error"][]="參數 \$conf[\"rangeT\"][\"s\"] 與 \$conf[\"rangeT\"][\"s\"] 必填";
226 liveuser 4322
 
3 liveuser 4323
			#設置執行失敗
4324
			$result["status"]="error";
226 liveuser 4325
 
3 liveuser 4326
			#回傳結果
4327
			return $result;
226 liveuser 4328
 
4329
			}#if end
4330
 
3 liveuser 4331
		#初始化儲存左方對照表
226 liveuser 4332
		$rangeF=array();
4333
 
3 liveuser 4334
		#建立左方對照表
4335
		for($i=$conf["rangeF"]["s"];$i<=$conf["rangeF"]["e"];$i++){
226 liveuser 4336
 
3 liveuser 4337
			$rangeF[]=$i;
226 liveuser 4338
 
3 liveuser 4339
			}#for end
226 liveuser 4340
 
3 liveuser 4341
		#初始化儲存右方對照表
226 liveuser 4342
		$rangeT=array();
4343
 
3 liveuser 4344
		#建立左方對照表
4345
		for($i=$conf["rangeT"]["s"];$i<=$conf["rangeT"]["e"];$i++){
226 liveuser 4346
 
3 liveuser 4347
			$rangeT[]=$i;
226 liveuser 4348
 
3 liveuser 4349
			}#for end
226 liveuser 4350
 
4351
		#函式說明:
3 liveuser 4352
		#左方數值範圍要對應的右方數值範圍
4353
		#回傳結果:
4354
		#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4355
		#$result["function"],當前執行的函數名稱.
4356
		#$result["error"],錯誤訊息陣列.
4357
		#$result["argu"],使用的參數.
4358
		#必填參數:
4359
		#$conf["rangeF"],整數陣列,要產生對應表的左手方
4360
		$conf["math::key2value"]["rangeF"]=$rangeF;
4361
		#可省略參數:
4362
		#$conf["rangeT"],整數陣列,要產生對應表的右手方,預設為0到100的整數.
4363
		$conf["math::key2value"]["rangeT"]=$rangeT;
4364
		#備註:
4365
		#建構中.
4366
		$ftTable=math::key2value($conf["math::key2value"]);
4367
		unset($conf["math::key2value"]);
226 liveuser 4368
 
3 liveuser 4369
		#如果執行失敗
4370
		if($ftTable["status"]==="false")
4371
		{
226 liveuser 4372
 
3 liveuser 4373
			#設置執行失敗
4374
			$result["status"]="false";
226 liveuser 4375
 
3 liveuser 4376
			#設置執行錯誤訊息
4377
			$result["error"]=$ftTable;
4378
 
4379
			#回傳結果
4380
			return $result;
226 liveuser 4381
 
3 liveuser 4382
		}#if end
226 liveuser 4383
 
3 liveuser 4384
		#debug
4385
		#var_dump($ftTable);exit;
226 liveuser 4386
 
3 liveuser 4387
		#取得左方對應右方的對照表
4388
		$ftTable=$ftTable["content"];
226 liveuser 4389
 
4390
		#函式說明:
3 liveuser 4391
		#左方數值範圍要對應的右方數值範圍
4392
		#回傳結果:
4393
		#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4394
		#$result["function"],當前執行的函數名稱.
4395
		#$result["error"],錯誤訊息陣列.
4396
		#$result["argu"],使用的參數.
4397
		#必填參數:
4398
		#$conf["rangeF"],整數陣列,要產生對應表的左手方
4399
		$conf["math::key2value"]["rangeF"]=$rangeT;
4400
		#可省略參數:
4401
		#$conf["rangeT"],整數陣列,要產生對應表的右手方,預設為0到100的整數.
4402
		$conf["math::key2value"]["rangeT"]=$rangeF;
4403
		#備註:
4404
		#建構中.
4405
		$tfTable=math::key2value($conf["math::key2value"]);
4406
		unset($conf["math::key2value"]);
226 liveuser 4407
 
3 liveuser 4408
		#如果執行失敗
4409
		if($tfTable["status"]==="false")
4410
		{
226 liveuser 4411
 
3 liveuser 4412
			#設置執行失敗
4413
			$result["status"]="false";
226 liveuser 4414
 
3 liveuser 4415
			#設置執行錯誤訊息
4416
			$result["error"]=$tfTable;
4417
 
4418
			#回傳結果
4419
			return $result;
226 liveuser 4420
 
3 liveuser 4421
		}#if end
226 liveuser 4422
 
3 liveuser 4423
		#取得左方對應右方的對照表
4424
		$tfTable=$tfTable["content"];
226 liveuser 4425
 
3 liveuser 4426
		#跑$conf["rangeF"]["e"]-$conf["rangeF"]["s"]+1次,修正轉換誤差.
4427
		for($i=$conf["rangeF"]["s"];$i<=$conf["rangeF"]["e"];$i++){
226 liveuser 4428
 
4429
			#函式說明:
3 liveuser 4430
			#數值對應的key
4431
			#回傳結果:
4432
			#$result["status"],執行正常與否,"true"為正常,"false"為不正常.
4433
			#$result["function"],當前執行的函數名稱.
4434
			#$result["error"],錯誤訊息陣列.
4435
			#$result["argu"],使用的參數.
4436
			#必填參數:
4437
			#$conf["value"],浮點數,要尋找對應的數值.
4438
			$conf["math::value2key"]["value"]=(double)($i-$conf["rangeF"]["s"]);
4439
			#$conf["reference"],整數陣列,透過math::key2value產生的對照表.
4440
			$conf["math::value2key"]["reference"]=$tfTable;
4441
			#可省略參數:
4442
			#無
4443
			$value2key=math::value2key($conf["math::value2key"]);
4444
			unset($conf["math::value2key"]);
4445
 
4446
			#如果執行失敗
4447
			if($value2key["status"]==="false"){
4448
 
4449
				#印出結果
4450
				var_dump($value2key);
4451
 
4452
				#結束執行
4453
				exit;
4454
 
4455
				}#if end
226 liveuser 4456
 
3 liveuser 4457
			#var_dump($value2key);exit;
226 liveuser 4458
 
3 liveuser 4459
			#fix 轉換誤差
4460
			$ft[$i]=$value2key["content"];
4461
 
226 liveuser 4462
			}#for end
4463
 
3 liveuser 4464
		#取得左右一對一的對照表
4465
		$result["content"]=$ft;
226 liveuser 4466
 
3 liveuser 4467
		#設置執行正常
4468
		$result["status"]="true";
226 liveuser 4469
 
3 liveuser 4470
		#回傳結果
4471
		return $result;
4472
 
226 liveuser 4473
		}#function fixedKeyToValueReversed end
4474
 
3 liveuser 4475
	/*
4476
	#函式說明:get Euler's number
4477
	#回傳結果:
4478
	#$result["status"],執行正常("true")與否("false").
4479
	#$result["content"],回傳數學常數(e).
4480
	#$reuslt["argu"],使用的參數.
4481
	#必填參數:
4482
	#無.
4483
	#可省略參數:
4484
	#$conf["pow"],整數字串,次方,預設為1,代表e的1次方.
4485
	#$conf["pow"]="1";
4486
	#參考資料:
4487
	#https://www.runoob.com/php/func-math-exp.html
4488
	#https://en.wikipedia.org/wiki/E_(mathematical_constant)
4489
	#備註:
4490
	#無.
4491
	*/
4492
	public static function getExp(&$conf=array()){
226 liveuser 4493
 
3 liveuser 4494
		#初始化要回傳的結果
4495
		$result=array();
4496
 
4497
		#取得當前執行的函數名稱
4498
		$result["function"]=__FUNCTION__;
4499
 
4500
		#取得參數
4501
		$result["argu"]=$conf;
4502
 
4503
		#如果 $conf 不為陣列
4504
		if(gettype($conf)!="array"){
4505
 
4506
			#設置執行失敗
4507
			$result["status"]="false";
4508
 
4509
			#設置執行錯誤訊息
4510
			$result["error"][]="\$conf變數須為陣列形態";
4511
 
4512
			#如果傳入的參數為 null
4513
			if(is_null($conf)){
4514
 
4515
				#設置執行錯誤訊息
4516
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4517
 
4518
				}#if end
4519
 
4520
			#回傳結果
4521
			return $result;
4522
 
4523
			}#if end
226 liveuser 4524
 
3 liveuser 4525
		#函式說明:
4526
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4527
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4528
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4529
		#$result["function"],當前執行的函式名稱.
4530
		#$result["argu"],設置給予的參數.
4531
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4532
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4533
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4534
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4535
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4536
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4537
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4538
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4539
		#必填寫的參數:
4540
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4541
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4542
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4543
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4544
		#可以省略的參數:
4545
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4546
		#$conf["mustBeFilledVariableName"]=array();
4547
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4548
		#$conf["mustBeFilledVariableType"]=array();
4549
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4550
		#$conf["canBeEmptyString"]="false";
4551
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
4552
		#$conf["canNotBeEmpty"]=array();
4553
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
4554
		#$conf["canBeEmpty"]=array();
4555
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4556
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("pow");
4557
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4558
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pow");
4559
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4560
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("pow");
4561
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4562
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1");
4563
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4564
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4565
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
4566
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
4567
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4568
		#$conf["arrayCountEqualCheck"][]=array();
4569
		#參考資料來源:
4570
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4571
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4572
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 4573
 
3 liveuser 4574
		#如果檢查參數失敗
4575
		if($checkArguments["status"]==="false"){
226 liveuser 4576
 
3 liveuser 4577
			#設置執行失敗
4578
			$result["status"]="false";
226 liveuser 4579
 
3 liveuser 4580
			#設置執行錯誤
4581
			$result["error"]=$checkArguments;
226 liveuser 4582
 
3 liveuser 4583
			#回傳結果
4584
			return $result;
226 liveuser 4585
 
3 liveuser 4586
			}#if end
226 liveuser 4587
 
3 liveuser 4588
		#如果檢查參數不通過
4589
		if($checkArguments["passed"]==="false"){
226 liveuser 4590
 
3 liveuser 4591
			#設置執行失敗
4592
			$result["status"]="false";
226 liveuser 4593
 
3 liveuser 4594
			#設置執行錯誤
4595
			$result["error"]=$checkArguments;
226 liveuser 4596
 
3 liveuser 4597
			#回傳結果
4598
			return $result;
226 liveuser 4599
 
3 liveuser 4600
			}#if end
226 liveuser 4601
 
3 liveuser 4602
		#設置要回傳的內容為常數 e 的 $conf["pow"] 次方
4603
		$result["content"]=exp($conf["pow"]);
226 liveuser 4604
 
3 liveuser 4605
		#設置執行正確
4606
		$result["status"]="true";
226 liveuser 4607
 
3 liveuser 4608
		#回傳結果
4609
		return $result;
226 liveuser 4610
 
3 liveuser 4611
		}#function getExp end
226 liveuser 4612
 
3 liveuser 4613
	/*
4614
	#函式說明:
4615
	#將16進位的16位數,轉換為小數點後到7位的gp表示方法.
4616
	#回傳結果:
4617
	#$result["status"],執行正常("true")與否("false").
4618
	#$result["content"],回傳GPS或16進位的16位數GPS.
4619
	#$reuslt["argu"],使用的參數.
4620
	#必填參數:
4621
	#$conf["rawGps"],字串,16進位的16位數,亦即gps的格式.
4622
	$conf["rawGps"]="";
4623
	#可省略參數:
4624
	#$conf["reverse"],預設為"false","true"代表要將經緯度(121.1234567,23.1234567)轉換為16進位的16位數字.
4625
	#$conf["reverse"]="true";
4626
	#參考資料:
4627
	#無.
4628
	#備註:
4629
	#無.
226 liveuser 4630
	*/
3 liveuser 4631
	public static function raw2gps(&$conf=array()){
226 liveuser 4632
 
3 liveuser 4633
		#初始化要回傳的結果
4634
		$result=array();
4635
 
4636
		#取得當前執行的函數名稱
4637
		$result["function"]=__FUNCTION__;
4638
 
4639
		#如果沒有參數
4640
		if(func_num_args()==0){
4641
 
4642
			#設置執行失敗
4643
			$result["status"]="false";
4644
 
4645
			#設置執行錯誤訊息
4646
			$result["error"]="函數".$result["function"]."需要參數";
4647
 
4648
			#回傳結果
4649
			return $result;
4650
 
4651
			}#if end
4652
 
4653
		#取得參數
4654
		$result["argu"]=$conf;
4655
 
4656
		#如果 $conf 不為陣列
4657
		if(gettype($conf)!=="array"){
4658
 
4659
			#設置執行失敗
4660
			$result["status"]="false";
4661
 
4662
			#設置執行錯誤訊息
4663
			$result["error"][]="\$conf變數須為陣列形態";
4664
 
4665
			#如果傳入的參數為 null
4666
			if(is_null($conf)){
4667
 
4668
				#設置執行錯誤訊息
4669
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4670
 
4671
				}#if end
4672
 
4673
			#回傳結果
4674
			return $result;
4675
 
4676
			}#if end
4677
 
4678
		#函式說明:
4679
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4680
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4681
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4682
		#$result["function"],當前執行的函式名稱.
4683
		#$result["argu"],設置給予的參數.
4684
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4685
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4686
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4687
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4688
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4689
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4690
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4691
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4692
		#必填寫的參數:
4693
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4694
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4695
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4696
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4697
		#可以省略的參數:
4698
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4699
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawGps");
4700
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4701
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4702
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4703
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4704
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
4705
		#$conf["canNotBeEmpty"]=array();
4706
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
4707
		#$conf["canBeEmpty"]=array();
4708
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4709
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("reverse");
4710
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4711
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("reverse");
4712
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4713
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4714
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4715
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4716
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4717
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4718
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
4719
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
4720
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4721
		#$conf["arrayCountEqualCheck"][]=array();
4722
		#參考資料來源:
4723
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4724
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4725
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 4726
 
3 liveuser 4727
		#如果檢查參數失敗
4728
		if($checkArguments["status"]==="false"){
226 liveuser 4729
 
3 liveuser 4730
			#設置執行失敗
4731
			$result["status"]="false";
226 liveuser 4732
 
3 liveuser 4733
			#設置執行錯誤
4734
			$result["error"]=$checkArguments;
226 liveuser 4735
 
3 liveuser 4736
			#回傳結果
4737
			return $result;
226 liveuser 4738
 
3 liveuser 4739
			}#if end
226 liveuser 4740
 
3 liveuser 4741
		#如果檢查參數不通過
4742
		if($checkArguments["passed"]==="false"){
226 liveuser 4743
 
3 liveuser 4744
			#設置執行失敗
4745
			$result["status"]="false";
226 liveuser 4746
 
3 liveuser 4747
			#設置執行錯誤
4748
			$result["error"]=$checkArguments;
226 liveuser 4749
 
3 liveuser 4750
			#回傳結果
4751
			return $result;
226 liveuser 4752
 
3 liveuser 4753
			}#if end
226 liveuser 4754
 
3 liveuser 4755
		#如果要把經緯度變成16進位的16位數字
4756
		if($conf["reverse"]==="true"){
226 liveuser 4757
 
3 liveuser 4758
			#函式說明:
4759
			#將固定格式的字串分開,並回傳分開的結果。
4760
			#回傳結果:
4761
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4762
			#$result["error"],錯誤訊息陣列
4763
			#$result["function"],當前執行的函數名稱.
4764
			#$result["argu"],使用的參數.
4765
			#$result["oriStr"],要分割的原始字串內容
4766
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4767
			#$result["dataCounts"],爲總共分成幾段
4768
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4769
			#必填參數:
4770
			#$conf["stringIn"],字串,要處理的字串.
4771
			$conf["stringProcess::spiltString"]["stringIn"]=$conf["rawGps"];
4772
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4773
			$conf["stringProcess::spiltString"]["spiltSymbol"]=",";
4774
			#可省略參數:
4775
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4776
			$conf["allowEmptyStr"]="false";
4777
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4778
			unset($conf["stringProcess::spiltString"]);
226 liveuser 4779
 
3 liveuser 4780
			#如果分割gps字串失敗
4781
			if($spiltString["status"]==="false"){
226 liveuser 4782
 
3 liveuser 4783
				#設置執行失敗
4784
				$result["status"]="false";
226 liveuser 4785
 
3 liveuser 4786
				#設置執行錯誤
4787
				$result["error"]=$spiltString;
226 liveuser 4788
 
3 liveuser 4789
				#回傳結果
4790
				return $result;
226 liveuser 4791
 
3 liveuser 4792
				}#if end
226 liveuser 4793
 
3 liveuser 4794
			#如果分割gps字串時,沒有發現逗號.
4795
			if($spiltString["found"]==="false"){
226 liveuser 4796
 
3 liveuser 4797
				#設置執行失敗
4798
				$result["status"]="false";
226 liveuser 4799
 
3 liveuser 4800
				#設置執行錯誤
4801
				$result["error"]=$spiltString;
226 liveuser 4802
 
3 liveuser 4803
				#回傳結果
4804
				return $result;
226 liveuser 4805
 
3 liveuser 4806
				}#if end
226 liveuser 4807
 
3 liveuser 4808
			#如果分割成不等於2段
4809
			if($spiltString["dataCounts"]!==2){
226 liveuser 4810
 
3 liveuser 4811
				#設置執行失敗
4812
				$result["status"]="false";
226 liveuser 4813
 
3 liveuser 4814
				#設置執行錯誤
4815
				$result["error"]=$spiltString;
226 liveuser 4816
 
3 liveuser 4817
				#設置錯誤訊息
4818
				$result["error"][]="應該要分割出經度跟緯度";
226 liveuser 4819
 
3 liveuser 4820
				#回傳結果
4821
				return $result;
226 liveuser 4822
 
3 liveuser 4823
				}#if end
226 liveuser 4824
 
3 liveuser 4825
			#取得緯度
4826
			$lat=$spiltString["dataArray"][0];
226 liveuser 4827
 
3 liveuser 4828
			#取得經度
4829
			$lon=$spiltString["dataArray"][1];
226 liveuser 4830
 
4831
			#檢查經度格式 - start
4832
 
3 liveuser 4833
			#初始化經度檢查未通過
4834
			$lonOk=false;
226 liveuser 4835
 
3 liveuser 4836
			#函式說明:
4837
			#將字串特定關鍵字與其前面的內容剔除
4838
			#回傳結果:
4839
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4840
			#$result["error"],錯誤訊息陣列.
4841
			#$result["warning"],警告訊息鎮列.
4842
			#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
4843
			#$result["function"],當前執行的函數名稱.
4844
			#$result["oriStr"],要處理的原始字串內容.
226 liveuser 4845
			#$result["content"],處理好的的字串內容.
3 liveuser 4846
			#必填參數:
4847
			$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$lon;#要處理的字串.
4848
			$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";#特定字串.
4849
			$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
4850
			unset($conf["stringProcess::delStrBeforeKeyWord"]);
226 liveuser 4851
 
3 liveuser 4852
			#如果分割經度字串失敗
4853
			if($delStrBeforeKeyWord["status"]==="false"){
226 liveuser 4854
 
3 liveuser 4855
				#設置執行失敗
4856
				$result["status"]="false";
226 liveuser 4857
 
3 liveuser 4858
				#設置執行錯誤
4859
				$result["error"]=$delStrBeforeKeyWord;
226 liveuser 4860
 
3 liveuser 4861
				#回傳結果
4862
				return $result;
226 liveuser 4863
 
3 liveuser 4864
				}#if end
226 liveuser 4865
 
3 liveuser 4866
			#如果分割經度字串時,沒有發現dot.
4867
			if($delStrBeforeKeyWord["founded"]==="false"){
226 liveuser 4868
 
3 liveuser 4869
				#設置執行失敗
4870
				$result["status"]="false";
226 liveuser 4871
 
3 liveuser 4872
				#設置執行錯誤
4873
				$result["error"]=$delStrBeforeKeyWord;
226 liveuser 4874
 
3 liveuser 4875
				#回傳結果
4876
				return $result;
226 liveuser 4877
 
3 liveuser 4878
				}#if end
226 liveuser 4879
 
3 liveuser 4880
			#如果沒有小數點後七位
4881
			if(strlen($delStrBeforeKeyWord["content"])!==7){
226 liveuser 4882
 
3 liveuser 4883
				#設置執行失敗
4884
				$result["status"]="false";
226 liveuser 4885
 
3 liveuser 4886
				#設置執行錯誤
4887
				$result["error"]=$delStrBeforeKeyWord;
226 liveuser 4888
 
3 liveuser 4889
				#設置執行錯誤
4890
				$result["error"][]="經度應該要包含小數點後7位.";
226 liveuser 4891
 
3 liveuser 4892
				#回傳結果
4893
				return $result;
226 liveuser 4894
 
3 liveuser 4895
				}#if end
226 liveuser 4896
 
3 liveuser 4897
			#如果是西經
4898
			if($lon<0){
226 liveuser 4899
 
3 liveuser 4900
				#轉正數加180
4901
				$lon=(-1)*$lon+180;
226 liveuser 4902
 
4903
				}#if end
4904
 
3 liveuser 4905
			#如果經度超過範圍
4906
			if($lon>360){
226 liveuser 4907
 
3 liveuser 4908
				#設置執行失敗
226 liveuser 4909
				$result["status"]="false";
4910
 
3 liveuser 4911
				#設置執行錯誤
4912
				$result["error"][]="經度不會大於180度";
226 liveuser 4913
 
3 liveuser 4914
				#回傳結果
4915
				return $result;
226 liveuser 4916
 
3 liveuser 4917
				}#if end
226 liveuser 4918
 
3 liveuser 4919
			#檢查經度格式 - end
226 liveuser 4920
 
4921
			#檢查緯度格式 - start
4922
 
3 liveuser 4923
			#初始化經度檢查未通過
4924
			$lonOk=false;
226 liveuser 4925
 
3 liveuser 4926
			#函式說明:
4927
			#將字串特定關鍵字與其前面的內容剔除
4928
			#回傳結果:
4929
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4930
			#$result["error"],錯誤訊息陣列.
4931
			#$result["warning"],警告訊息鎮列.
4932
			#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
4933
			#$result["function"],當前執行的函數名稱.
4934
			#$result["oriStr"],要處理的原始字串內容.
226 liveuser 4935
			#$result["content"],處理好的的字串內容.
3 liveuser 4936
			#必填參數:
4937
			$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$lat;#要處理的字串.
4938
			$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";#特定字串.
4939
			$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
4940
			unset($conf["stringProcess::delStrBeforeKeyWord"]);
226 liveuser 4941
 
3 liveuser 4942
			#如果分割緯度字串失敗
4943
			if($delStrBeforeKeyWord["status"]==="false"){
226 liveuser 4944
 
3 liveuser 4945
				#設置執行失敗
4946
				$result["status"]="false";
226 liveuser 4947
 
3 liveuser 4948
				#設置執行錯誤
4949
				$result["error"]=$delStrBeforeKeyWord;
226 liveuser 4950
 
3 liveuser 4951
				#回傳結果
4952
				return $result;
226 liveuser 4953
 
3 liveuser 4954
				}#if end
226 liveuser 4955
 
3 liveuser 4956
			#如果分割緯度字串時,沒有發現dot.
4957
			if($delStrBeforeKeyWord["founded"]==="false"){
226 liveuser 4958
 
3 liveuser 4959
				#設置執行失敗
4960
				$result["status"]="false";
226 liveuser 4961
 
3 liveuser 4962
				#設置執行錯誤
4963
				$result["error"]=$delStrBeforeKeyWord;
226 liveuser 4964
 
3 liveuser 4965
				#回傳結果
4966
				return $result;
226 liveuser 4967
 
3 liveuser 4968
				}#if end
226 liveuser 4969
 
3 liveuser 4970
			#如果沒有小數點後七位
4971
			if(strlen($delStrBeforeKeyWord["content"])!==7){
226 liveuser 4972
 
3 liveuser 4973
				#設置執行失敗
4974
				$result["status"]="false";
226 liveuser 4975
 
3 liveuser 4976
				#設置執行錯誤
4977
				$result["error"]=$delStrBeforeKeyWord;
226 liveuser 4978
 
3 liveuser 4979
				#設置執行錯誤
4980
				$result["error"][]="緯度應該要包含小數點後7位.";
226 liveuser 4981
 
3 liveuser 4982
				#回傳結果
4983
				return $result;
226 liveuser 4984
 
3 liveuser 4985
				}#if end
226 liveuser 4986
 
3 liveuser 4987
			#如果是南緯
4988
			if($lat<0){
226 liveuser 4989
 
3 liveuser 4990
				#轉正數加180
4991
				$lat=(-1)*$lat+90;
226 liveuser 4992
 
4993
				}#if end
4994
 
3 liveuser 4995
			#如果緯度超過範圍
4996
			if($lat>180){
226 liveuser 4997
 
3 liveuser 4998
				#設置執行失敗
226 liveuser 4999
				$result["status"]="false";
5000
 
3 liveuser 5001
				#設置執行錯誤
5002
				$result["error"][]="緯度不會大於90度";
226 liveuser 5003
 
3 liveuser 5004
				#回傳結果
5005
				return $result;
226 liveuser 5006
 
3 liveuser 5007
				}#if end
226 liveuser 5008
 
3 liveuser 5009
			#檢查緯度格式 - end
226 liveuser 5010
 
3 liveuser 5011
			#取得16進位的緯度
5012
			$lat=sprintf("%08s",strtoupper(base_convert($lat*pow(10,7),10,16)));
226 liveuser 5013
 
3 liveuser 5014
			#取得16進位的經度
5015
			$lon=sprintf("%08s",strtoupper(base_convert($lon*pow(10,7),10,16)));
226 liveuser 5016
 
3 liveuser 5017
			#設置要回傳的16進位16位數字的經緯度
5018
			$result["content"]=$lat.$lon;
226 liveuser 5019
 
3 liveuser 5020
			#設置執行正常
5021
			$result["status"]="true";
226 liveuser 5022
 
3 liveuser 5023
			#回傳結果
5024
			return $result;
226 liveuser 5025
 
3 liveuser 5026
		}#if end
226 liveuser 5027
 
3 liveuser 5028
		#取得16進位緯度
5029
		$lat=substr($conf["rawGps"],0,8);
226 liveuser 5030
 
3 liveuser 5031
		#取得16進位經度
5032
		$lon=substr($conf["rawGps"],8,8);
226 liveuser 5033
 
3 liveuser 5034
		#取得10進位的經度
5035
		$lon=base_convert($lon,16,10);
226 liveuser 5036
 
3 liveuser 5037
		#取得10進位的緯度
5038
		$lat=base_convert($lat,16,10);
226 liveuser 5039
 
3 liveuser 5040
		#如果經度超過範圍
5041
		if($lon>2*180*pow(10,7))
5042
		{
5043
			#設置錯誤訊息
5044
			$result["error"][]="經度超過範圍";
226 liveuser 5045
 
3 liveuser 5046
			#設置錯誤
5047
			$result["status"]="false";
226 liveuser 5048
 
3 liveuser 5049
			#回傳結果
5050
			return $result;
226 liveuser 5051
 
3 liveuser 5052
		}#if end
226 liveuser 5053
 
3 liveuser 5054
		#如果緯度超過範圍
5055
		if($lat>2*90*pow(10,7))
5056
		{
5057
			#設置錯誤訊息
5058
			$result["error"][]="緯度超過範圍";
226 liveuser 5059
 
3 liveuser 5060
			#設置錯誤
5061
			$result["status"]="false";
226 liveuser 5062
 
3 liveuser 5063
			#回傳結果
5064
			return $result;
226 liveuser 5065
 
3 liveuser 5066
		}#if end
226 liveuser 5067
 
3 liveuser 5068
		#如果是西經
5069
		if($lon>180*pow(10,7))
5070
		{
5071
			$lon=-($lon-180*pow(10,7));
226 liveuser 5072
 
3 liveuser 5073
		}#if end
226 liveuser 5074
 
3 liveuser 5075
		#如果是南緯
5076
		if($lat>90*pow(10,7))
5077
		{
5078
			$lat=-($lat-90*pow(10,7));
226 liveuser 5079
 
3 liveuser 5080
		}#if end
226 liveuser 5081
 
3 liveuser 5082
		#設置要回傳的結果
5083
		$result["content"]=$lat*pow(10,-7).",".$lon*pow(10,-7);
226 liveuser 5084
 
3 liveuser 5085
		#設置執行正常
5086
		$result["status"]="true";
226 liveuser 5087
 
3 liveuser 5088
		#回傳結果
5089
		return $result;
226 liveuser 5090
 
3 liveuser 5091
		}#function raw2gps
5092
 
5093
	}#class math end
5094
 
5095
?>