Subversion Repositories qbpwcf-lib(archive)

Rev

Rev 891 | Rev 911 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

/*

        QBPWCF, Quick Build PHP website Component base on Fedora Linux.
    Copyright (C) 2015~2024 Min-Jhin,Chen

    This file is part of QBPWCF.

    QBPWCF is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    QBPWCF is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.

*/
namespace qbpwcf;

/*
類別說明:
應用R的類別.
備註:
R的線上學習網站=>https://sites.google.com/site/rlearningsite/
*/
class R{

        /*
        #函式說明:
        #當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$method,物件,為物件實體或類別名稱,會自動置入該參數.
        #$arguments,陣列,為呼叫方法時所用的參數.
        #參考資料:
        #__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
        #備註:
        #無
        */
        public function __call($method,$arguments){
                
                #取得當前執行的函式
                $result["function"]=__FUNCTION__;
                
                #設置執行不正常
                $result["status"]="false";
                
                #設置執行錯誤
                $result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
                
                #設置所丟入的參數
                $result["error"][]=$arguments;
                
                #回傳結果
                return $result;
                
                }#function __call end
                
        /*
        #函式說明:
        #當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$method,物件,為物件實體或類別名稱,會自動置入該參數.
        #$arguments,陣列,為呼叫方法時所用的參數.
        #參考資料:
        #__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
        #備註:
        #無
        */
        public static function __callStatic($method,$arguments){
                
                #取得當前執行的函式
                $result["function"]=__FUNCTION__;
                
                #設置執行不正常
                $result["status"]="false";
                
                #設置執行錯誤
                $result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
                
                #設置所丟入的參數
                $result["error"][]=$arguments;
                
                #回傳結果
                return $result;
                
                }#function __callStatic end

        /*
        #函式說明:
        #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$result["errror"],錯誤訊息陣列
        #$result["function"],當前執行的函數名稱
        #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
        #$result["lineCount"],整數,R輸出的總共行數.
        #$result["RscriptContent"],執行的R腳本內容,一個元素代表一列.
        #必填參數:
        #$conf["rPositionAndName"],字串,R腳本的位置與名稱.
        $conf["rPositionAndName"]=".R";
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
        #$conf["disbaleOptimal"]="true";
        #參考資料:
        #無.
        #備註:
        #無.
        */ 
        public static function executeR(&$conf){
                
                #初始化要回傳的結果
                $result=array();
                
                #設置當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不等於 "array"
                if(gettype($conf)!="array"){                            
                        
                        #設定錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]="參數的Key指定有誤!";
                        
                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $conf["disbaleOptimal"] 未設定
                if(!isset($conf["disbaleOptimal"])){
                        
                        #預設 $conf["disbaleOptimal"] 為 "false"
                        $conf["disbaleOptimal"]="false";
                        
                        }#if end
                
                #檢查參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #必填寫的參數:
                $conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("rPositionAndName","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
                unset($conf["variableCheck"]["isexistMuti"]);
                
                #如果 $checkResult["status"] 等於 "false"
                if($checkResult["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果 $checkResult["passed"] 等於 "false"
                if($checkResult["passed"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #產生暫時存放執行結果的檔案
                #函式說明:
                #檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
                #回傳的結果:
                #$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["createdFileName"],建立好的檔案名稱.
                #$result["createdFilePath"],檔案建立的路徑.
                #$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
                #必填的參數:
                #$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
                $conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=".R/tempOutPut";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
                $createTempFileOfOutput=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
                unset($conf["fileAccess"]["createFileAfterCheck"]);
                
                #如果 $createTempFileOfOutput["status"] 等於 "false"
                if($createTempFileOfOutput["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$createTempFileOfOutput;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得R腳本內容
                #函式說明:
                #依據行號分隔抓取檔案的內容,結果會回傳一個陣列
                #回傳的變數說明:
                #$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
                #$result["error"],錯誤訊息提示
                #$result["fileContent"],爲檔案的內容陣列
                #$result["lineCount"],爲檔案內容總共的行數
                #$result["fullContent"],為檔案的完整內容
                #必填的參數:
                $conf["file.getFileContent"]["filePositionAndName"]=$conf["rPositionAndName"];#爲檔案的位置以及名稱
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["file.getFileContent"]["fileArgu"]=$conf["fileArgu"];
                #參考資料:
                #file():取得檔案內容的行數
                #http:#php.net/manual/en/function.file.php
                #rtrim():剔除透過file()取得每行內容結尾的換行符號.
                $getRscriptContent=fileAccess::getFileContent($conf["file.getFileContent"]);
                unset($conf["file.getFileContent"]);
                        
                #如果取得R腳本內容失敗
                if($getRscriptContent["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$getRscriptContent;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得R腳本內容
                $result["RscriptContent"]=$getRscriptContent["fileContent"];
                        
                #初始化要執行的R指令參數
                $paramsArray=array();
                        
                #如果要優化R的執行
                if($conf["disbaleOptimal"]=="false"){
                        
                        #設定要執行的R指令參數
                        $paramsArray=array("--vanilla","-q","-f",$conf["rPositionAndName"],">",$createTempFileOfOutput["createdFilePathAndName"]);
                        
                        }#if end
                        
                #反之代表不優化R的執行
                else{
                        
                        #設定要執行的R指令參數
                        $paramsArray=array("-f",$conf["rPositionAndName"],">",$createTempFileOfOutput["createdFilePathAndName"]);
                        
                        }#else end
                
                #函式說明:
                #呼叫shell執行系統命令,並取得回傳的內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函數名稱.
                #$result["argu"],使用的參數.
                #$result["cmd"],執行的指令內容.
                #$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
                #$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
                #$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
                #$result["running"],是否還在執行.
                #$result["pid"],pid.
                #$result["statusCode"],執行結束後的代碼.
                #$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
                #必填參數:
                #$conf["command"],字串,要執行的指令.
                $conf["external"]["callShell"]["command"]="R";
                #$conf["fileArgu"],字串,變數__FILE__的內容.
                $conf["external"]["callShell"]["fileArgu"]=__FILE__;
                #可省略參數:
                #$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
                $conf["external"]["callShell"]["argu"]=$paramsArray;
                #$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
                #$conf["arguIsAddr"]=array();
                #$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
                #$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
                #$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
                #$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
                #$conf["enablePrintDescription"]="true";
                #$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
                #$conf["printDescription"]="";
                #$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
                $conf["external"]["callShell"]["escapeshellarg"]="true";
                #$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
                #$conf["thereIsShellVar"]=array();
                #$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
                #$conf["username"]="";
                #$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
                #$conf["password"]="";
                #$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
                #$conf["useScript"]="";
                #$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
                #$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
                #$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
                #$conf["inBackGround"]="";
                #$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
                #$conf["getErr"]="false";
                #$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
                #$conf["doNotRun"]="false";
                #參考資料:
                #exec=>http://php.net/manual/en/function.exec.php
                #escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
                #escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
                #備註:
                #不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
                #若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
                $executionResult=external::callShell($conf["external"]["callShell"]);
                unset($conf["external"]["callShell"]);
                
                #如果 $executionResult["status"] 等於 "false"
                if($executionResult["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$executionResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得暫存檔裡面的R輸出結果
                #函式說明:
                #依據行號分隔抓取檔案的內容,結果會回傳一個陣列
                #回傳的變數說明:
                #$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
                #$result["error"],錯誤訊息提示
                #$result["fileContent"],爲檔案的內容陣列
                #$result["lineCount"],爲檔案內容總共的行數
                #$result["fullContent"],為檔案的完整內容
                #必填的參數:
                $conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$createTempFileOfOutput["createdFilePathAndName"];#爲檔案的位置以及名稱
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["getFileContent"]["fileArgu"]=$conf["fileArgu"];
                #參考資料:
                #file():取得檔案內容的行數
                #http:#php.net/manual/en/function.file.php
                #rtrim():剔除透過file()取得每行內容結尾的換行符號.
                $readRtempOutPutFile=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
                unset($conf["fileAccess"]["getFileContent"]);
                
                #如果 $readRtempOutPutFile["status"] 等於 "false"
                if($readRtempOutPutFile["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$readRtempOutPutFile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得輸出內容行數
                $result["lineCount"]=$readRtempOutPutFile["lineCount"];
                
                #取得輸出內容陣列
                $result["lineArray"]=$readRtempOutPutFile["fileContent"];
                
                #移除R腳本檔案
                #涵式說明:
                #移除檔案
                #回傳的結果:
                #$result["status"],"true"代表移除成功,"false"代表移除失敗.
                #必填的參數:
                $conf["fileAccess"]["delFile"]["fileAddress"]=$conf["rPositionAndName"];#要移除檔案的位置
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
                $eraseRsh=fileAccess::delFile($conf["fileAccess"]["delFile"]);
                unset($conf["fileAccess"]["delFile"]);
                        
                #如果 $eraseRsh["status"] 等於 "false"
                if($eraseRsh["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$eraseRsh;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #移除暫存R輸出的檔案
                #涵式說明:
                #移除檔案
                #回傳的結果:
                #$result["status"],"true"代表移除成功,"false"代表移除失敗.
                #必填的參數:
                $conf["fileAccess"]["delFile"]["fileAddress"]=$createTempFileOfOutput["createdFilePathAndName"];#要移除檔案的位置
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
                $eraseRtempOutputFile=fileAccess::delFile($conf["fileAccess"]["delFile"]);
                unset($conf["fileAccess"]["delFile"]);
                        
                #如果 $eraseRsh["status"] 等於 "false"
                if($eraseRtempOutputFile["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$eraseRsh;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function executeR end

        /*
        #涵式說明:
        #展示R的文字輸出範例
        #回傳的結果:
        #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱.
        #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
        #$result["content"],執行完後的結果陣列,一個元素代表一列內容.
        #必填參數:
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function demoTextOutput(&$conf=array()){

                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";
                        
                        #如果傳入的參數為 null
                        if($conf===null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end

                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填寫的參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                $conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                #$conf["skipableVariableCanNotBeEmpty"]=array();
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["skipableVariableName"]=array();
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                #$conf["skipableVariableType"]=array();
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["skipableVarDefaultValue"]=array("");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料來源:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #建議:
                #增加可省略參數全部不能為空字串或空陣列的參數功能.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);

                #如果檢查參數失敗
                if($checkArguments["status"]==="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果參數檢查不通過
                if($checkArguments["passed"]==="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #建立要寫入的行內容
                $rCode[]="#宣告變數k,其值等於1";
                $rCode[]="k=1";

                $rCode[]="#檢視變數內容";
                $rCode[]="k";
                
                $rCode[]="#判斷變數k是否爲integer";                      
                $rCode[]="is.integer(k)";
                
                $rCode[]="#宣告變數k,其值等於integer型態的1";
                $rCode[]="k=as.integer(1)";
                
                $rCode[]="#檢視變數內容";                 
                $rCode[]="k";   
                
                $rCode[]="#判斷變數k是否爲integer";      
                $rCode[]="is.integer(k)";       
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #true代表寫入成功,false代表寫入失敗
                #必填的參數:
                $conf["R"]["writeRfile"]["addAndName"]=".rOutput/rDemo.R";#R檔案的位置與名稱
                $conf["R"]["writeRfile"]["textToWrite"]=$rCode;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #必填參數:
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
                $conf["R"]["writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $writeRfile=R::writeRfile($conf["R"]["writeRfile"]);
                unset($conf["R"]["writeRfile"]);

                #如果建立R腳本檔案失敗
                if($writeRfile["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$writeRfile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #呼叫系統命令使用R來執行檔案內的指令,將結果輸出到檔案裏面。
                #system("R <.rOutput/rDemo.R --no-save > .rOutput/".$_SESSION["username"]."-output");
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #$result["RscriptContent"],執行的R腳本內容,一個元素代表一列.
                #必填的參數:
                #$conf["R::executeR"]["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R::executeR"]["rPositionAndName"]=".rOutput/rDemo.R";
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["disbaleOptimal"]="true";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
                $conf["R::executeR"]["fileArgu"]=$conf["fileArgu"];
                $executeR=R::executeR($conf["R::executeR"]);
                unset($conf["R::executeR"]);
                
                #如果執行R腳本失敗
                if($executeR["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$executeR;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                                        
                #取得執行完的結果
                $result["content"]=$executeR["lineArray"];

                #設置執行正常
                $result["status"]="true";

                #回傳執行結果
                return $result;

                }#if end

        /*
        #涵式說明:
        #展示R的繪圖範例
        #回傳結果:
        #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱.
        #$result["text"],執行R所得到的文字內容.
        #$result["img"],顯示圖表的語法.
        #必填參數:
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #無
        #參考資料:
        #無.
        #備註:
        #無
        */
        public static function demoGraphiOutput(&$conf=array()){

                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";
                        
                        #如果傳入的參數為 null
                        if($conf===null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end

                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填寫的參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                $conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                #$conf["skipableVariableCanNotBeEmpty"]=array();
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["skipableVariableName"]=array();
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                #$conf["skipableVariableType"]=array();
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["skipableVarDefaultValue"]=array("");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料來源:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #建議:
                #增加可省略參數全部不能為空字串或空陣列的參數功能.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);

                #如果檢查參數失敗
                if($checkArguments["status"]==="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果參數檢查不通過
                if($checkArguments["passed"]==="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #建立要寫入的行內容
                $rCode[]="#創建圖片,將繪圖的結果都存在該圖裏面";
                $rCode[]="svg(filename=\".rOutput/temp.svg\")";

                $rCode[]="#產生常態分配資料100筆";
                $rCode[]="y=rnorm(100,5,10)";

                $rCode[]="#繪製直方圖";
                $rCode[]="hist(y,prob=TRUE)";
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #true代表寫入成功,false代表寫入失敗
                #必填的參數:
                $conf["R"]["writeRfile"]["addAndName"]=".rOutput/rGraphiDemo.R";#R檔案的位置與名稱
                $conf["R"]["writeRfile"]["textToWrite"]=$rCode;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R"]["writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $writeRfile=R::writeRfile($conf["R"]["writeRfile"]);
                unset($conf["R"]["writeRfile"]);

                #如果建立R腳本檔案失敗
                if($writeRfile["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$writeRfile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #呼叫系統命令使用R來執行檔案內的指令,將結果輸出到檔案裏面。
                #system("R <.rOutput/rDemo.R --no-save > .rOutput/".$_SESSION["username"]."-output");
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #$result["RscriptContent"],執行的R腳本內容,一個元素代表一列.
                #必填的參數:
                #$conf["R::executeR"]["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R::executeR"]["rPositionAndName"]=".rOutput/rGraphiDemo.R";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R::executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["disbaleOptimal"]="true";
                $executeR=R::executeR($conf["R::executeR"]);
                unset($conf["R::executeR"]);
                
                #如果執行R腳本失敗
                if($executeR["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$executeR;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #印出統計圖的語法
                #函數說明:
                #用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息
                #$result["content"],圖片的連結資訊
                #$result["function"],當前執行的函數名稱 
                #必填參數:
                #$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
                $conf["img::data"]["imgPosition"]=".rOutput/temp.svg";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["img::data"]["fileArgu"]=$conf["fileArgu"];
                #可省略參數:
                #$conf["alt"],若沒有圖片要用什麼文字顯示。
                #$conf["alt"]="";
                #$conf["style"],字串陣列,要使用的style,key為樣式名稱,value為樣式值.
                $conf["img::data"]["style"]=array("width"=>"100%");
                #$conf["class"],圖片要套用的css樣式名稱.
                #$conf["class"]="";
                #$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
                $conf["img::data"]["mimeType"]="image/svg+xml";
                #$conf["compressType"],2元碼壓縮的方式,預設為"base64".
                #$conf["compressType"]="base64";
                #$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
                $conf["img::data"]["delImg"]="false";
                #參考資料:
                #將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
                #壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
                $data=img::data($conf["img::data"]);
                unset($conf["img::data"]);

                #如果顯示圖片失敗
                if($data["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$data;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end

                #取得執行R過後的結果
                $result["text"]=$executeR["lineArray"];

                #取得顯示圖表的語法
                $result["img"]=$data["content"];

                #設置執行正常
                $result["status"]="true";

                #回傳結果
                return $result;

                }#function demoGraphiOutput end
        
        /*
        #涵式說明:
        #建立R檔案
        #回傳的結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
        #必填參數:
        #$conf["addAndName"],字串,檔案的位置與名稱,"folderName/fileName.R"
        $conf["addAndName"]="";
        #$conf["textToWrite"],字串陣列,要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行.
        $conf["textToWrite"]=array("");
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */              
        public static function writeRfile(&$conf=array()){
                
                #初始化要回傳的結果
                $result=array();
                
                #設置當前執行的涵式
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不等於 "array"
                if(gettype($conf)!="array"){                            
                        
                        #設定錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]="參數的Key指定有誤!";
                        
                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #必填寫的參數:
                $conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("addAndName","textToWrite","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
                unset($conf["variableCheck"]["isexistMuti"]);
                
                #如果 $checkResult["status"] 等於 "false"
                if($checkResult["status"]=="false"){
                
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果 $checkResult["passed"] 等於 "false"
                if($checkResult["passed"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #建立R腳本檔
                #函式說明:
                #檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
                #回傳的結果:
                #$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["createdFileName"],建立好的檔案名稱.
                #$result["createdFilePath"],檔案建立的路徑.
                #$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
                #必填的參數:
                #$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
                $conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=$conf["addAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
                $createResult=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
                unset($conf["fileAccess"]["createFileAfterCheck"]);
                
                #如果R腳本檔案建立失敗
                if($createResult["status"]=="false"){
                        
                        #建立錯誤識別
                        $result["status"]="false";
                        
                        #建立錯誤訊息
                        $result["error"]=$createResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得R腳本檔的位置與名稱
                $result["newCreatedRfilePathAndName"]=$createResult["createdFilePathAndName"];
                
                #針對$conf["textToWrite"]的每個元素
                foreach($conf["textToWrite"] as $key=>$value){
                        
                        #涵式說明:
                        #將字串寫入到檔案
                        #回傳的結果:
                        #$result,true表示檔案建立成功,false表示檔案建立失敗
                        #必填的參數:
                        $conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$result["newCreatedRfilePathAndName"];#爲要編輯的檔案名稱
                        $conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
                        $conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                        $conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
                        $writeFileresult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
                        unset($conf["fileAccess"]["writeTextIntoFile"]);

                        #如果 寫入結果爲 "false"
                        if($writeFileresult["status"]=="false"){

                                #設置錯誤識別
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"][]="寫入檔案失敗,可能http沒有權限,或 ".$conf["addAndName"]." 檔案不存在.";

                                #回傳結果
                                return $result;

                                }#if end

                        }#foreach end
                        
                #執行到這邊代表執行成功
                $result["status"]="true";
                
                #回傳結果
                return $result;

                }#function createRfile end
                
        /*
        #函式說明:
        #針對csv樣本檔作決策樹分析,可以設定分析完後是否要刪除csv樣本檔.
        #回傳的結果:
        #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱.
        #$result["lineArray"],執行結果輸出的逐行內容.
        #$result["lineCount"],執行結果輸出的行數.
        #$result["content"],顯示圖表的語法.
        #$result["img"],圖表的位置與名稱
        #必填參數:
        #$conf["inputCsvFilePosition"],字串,csv資料檔的路徑與名稱,資料檔的第一欄為各變數的標題.
        $conf["inputCsvFilePosition"]=".csv";
        #$conf["targetVar"],字串,要預測的變數名稱.
        $conf["targetVar"]="";
        #$conf["independentVar"],陣列字串,用來預測的變數名稱陣列.
        $conf["independentVar"]=array();
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["trainDataPercent"],字串,訓練資料要佔多少,預設為"0.7".
        #$conf["trainDataPercent"]="0.7";
        #$conf["testDataPercent"],字串,測試資料要佔多少,預設"0.3".
        #$conf["testDataPercent"]="0.3";
        #$conf["trainDataReportImgPositionAndName"],字串,決策樹分析訓練資料後的關聯圖表輸出位置與名稱,預設為"report.png".
        #$conf["trainDataReportImgPositionAndName"]="report.png";
        #$conf["delSampleCsvFile"],字串,是否要在分析結束後,移除樣本csv檔案,預設為"false"不移除,"true"則代表要移除.
        #$conf["delSampleCsvFile"]="false";
        #參考資料:
        #R的決策樹分析範例=>http://www.rdatamining.com/examples/decision-tree
        #備註:
        #測試資料分析尚未撰寫
        */
        public static function decisionTreeWithPackageParty(&$conf){
                
                #初始化要回傳的結果
                $result=array();
                
                #取得當前執行函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #必填寫的參數:
                $conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("fileArgu","inputCsvFilePosition","targetVar","independentVar");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
                unset($conf["variableCheck"]["isexistMuti"]);
                
                #如果 $checkResult["status"] 等於 "false"
                if($checkResult["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果 $checkResult["passed"] 等於 "false"
                if($checkResult["passed"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $conf["trainDataPercent"] 未設定
                if(!isset($conf["trainDataPercent"])){
                        
                        #預設為 0.7
                        $conf["trainDataPercent"]="0.7";
                        
                        }#if end
                
                #如果 $conf["testDataPercent"] 未設定      
                if(!isset($conf["testDataPercent"])){
                        
                        #預設為 0.3
                        $conf["testDataPercent"]="0.3";
                        
                        }#if end
                        
                #如果 $conf["trainDataReportImgPositionAndName"] 未設定
                if(!isset($conf["trainDataReportImgPositionAndName"])){
                
                        #預設為 trainDataReport.png
                        $conf["trainDataReportImgPositionAndName"]="report.png";
                        
                        }#if end
                        
                #如果 $conf["delSampleCsvFile"] 未設定
                if(!isset($conf["delSampleCsvFile"])){
                        
                        #預設為 "false"
                        $conf["delSampleCsvFile"]="false";
                        
                        }#if end
                
                #初始化要寫入到R腳本的內容
                $rCode=array();
                
                #讀取 csv檔的內容
                $rCode[]="Data <- read.csv(\"".$conf["inputCsvFilePosition"]."\")";
                
                #分割讀到的資料檔為訓練資料、測試資料
                $rCode[]="ind <- sample(2, nrow(Data), replace=TRUE, prob=c(".$conf["trainDataPercent"].",".$conf["testDataPercent"]."))";
                        
                #將Data的第一組資料,亦即70%的Data資料放置到trainData裡面作為訓練資料。
                $rCode[]="trainData <- Data[ind==1,]";

                #將Data的第二組資料,亦即30%的Data資料放置到testData裡面作為測試資料。
                $rCode[]="testData <- Data[ind==2,]";
                
                #使用 party 套件,內包含 ctree()與predict()
                $rCode[]="library(party)";
                
                #建立要預測變數的字串
                #myFormula指定 $conf["targetVar"] 為被預測變數,其他變數則為獨立變數.
                $formula="myFormula <- ".$conf["targetVar"]." ~ ";
                                        
                #初始化獨立變數的字串
                $independentStr="";
                
                #建立獨立變數字串
                for($i=0;$i<count($conf["independentVar"]);$i++){
                        
                        #串連獨立變數字串
                        $independentStr=$independentStr." + ".$conf["independentVar"][$i];
                        
                        }#for end
                        
                #儲存要預測變數與獨立變數到R腳本裡面
                $rCode[]=$formula.$independentStr;
                        
                #使用 ctree 建立決策樹,被預測變數與預測變數的設定存在myFormula,用來建立決策樹的資料為儲存在trainData的資料
                $rCode[]="Data_ctree <- ctree(myFormula, data=trainData)";
                        
                #用表來檢測預測的狀態
                $rCode[]="table(predict(Data_ctree), trainData$".$conf["targetVar"].")";
                        
                #輸出文字模式的決策樹結果
                $rCode[]="print(Data_ctree)";
                        
                #指定等等繪製出來的圖表要儲存在哪邊,寬度與高度為何。
                $rCode[]="svg(filename=\"".$conf["trainDataReportImgPositionAndName"]."\")";    
                
                #畫出詳細版的決策樹結果,含預測出來的變數內容為何。
                $rCode[]="plot(Data_ctree)";
                
                #預測測試資料
                $rCode[]="testPred <- predict(Data_ctree, newdata = testData)";
                $rCode[]="table(testPred, testData$".$conf["targetVar"].")";
                        
                #寫入R腳本的內容
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R"]["writeRfile"]["addAndName"]=".R/party-".$_SESSION["username"]."-.R";#R檔案的位置與名稱
                $conf["R"]["writeRfile"]["textToWrite"]=$rCode;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R"]["writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $writeRfileResult=R::writeRfile($conf["R"]["writeRfile"]);
                unset($conf["R"]["writeRfile"]);
                
                #var_dump($writeRfileResult);
                
                #如果 $writeRfileResult["status"] 等於 "false"
                if($writeRfileResult["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$writeRfileResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #執行 R 腳本
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R"]["executeR"]["rPositionAndName"]=$writeRfileResult["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R"]["executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["R"]["executeR"]["disbaleOptimal"]="true";
                $executeRresult=R::executeR($conf["R"]["executeR"]);
                unset($conf["R"]["executeR"]);
                
                #如果 $executeRresult["status"] 等於 "false"
                if($executeRresult["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$executeRresult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $conf["delSampleCsvFile"] 等於 "true"
                if($conf["delSampleCsvFile"]=="true"){
                        
                        #則要移除樣本csv檔案
                        #涵式說明:
                        #移除檔案
                        #回傳的結果:
                        #$result["status"],"true"代表移除成功,"false"代表移除失敗.
                        #必填的參數:
                        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                        $conf["fileAccess"]["delFile"]["fileArgu"]=$conf["fileArgu"];
                        $conf["fileAccess"]["delFile"]["fileAddress"]=$conf["inputCsvFilePosition"];#要移除檔案的位置
                        $eraseSampleCsvResult=fileAccess::delFile($conf["fileAccess"]["delFile"]);
                        unset($conf["fileAccess"]["delFile"]);
                        
                        #如果 $eraseSampleCsvResult["status"] 等於 "false"
                        if($eraseSampleCsvResult["status"]=="false"){
                                
                                #設置錯誤識別
                                $result["status"]="false";
                        
                                #設置錯誤訊息
                                $result["error"]=$eraseSampleCsvResult;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        }#if end        
                        
                #取得 R 的執行結果
                $result["lineArray"]=$executeRresult["lineArray"];
                
                #取得 R 的執行結果行數
                $result["lineCount"]=$executeRresult["lineCount"];
                
                #取得圖表的位置
                $result["img"]=$conf["trainDataReportImgPositionAndName"];
                
                #放置圖表的語法
                #函數說明:
                #用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息
                #$result["content"],圖片的連結資訊
                #$result["function"],當前執行的函數名稱 
                #必填參數:
                #$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
                $conf["img::data"]["imgPosition"]=$conf["trainDataReportImgPositionAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["img::data"]["fileArgu"]=$conf["fileArgu"];
                #可省略參數:
                #$conf["alt"],若沒有圖片要用什麼文字顯示。
                #$conf["alt"]="";
                #$conf["style"],字串陣列,要使用的style,key為樣式名稱,value為樣式值.
                $conf["img::data"]["style"]=array("width"=>"100%");
                #$conf["class"],圖片要套用的css樣式名稱.
                #$conf["class"]="";
                #$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
                $conf["img::data"]["mimeType"]="image/svg+xml";
                #$conf["compressType"],2元碼壓縮的方式,預設為"base64".
                #$conf["compressType"]="base64";
                #$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
                #$conf["delImg"]="false";
                #參考資料:
                #將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
                #壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
                $data=img::data($conf["img::data"]);
                unset($conf["img::data"]);
                
                #如果顯示圖片失敗
                if($data["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$data;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #放置圖表的語法
                $result["content"]=$data["content"];
                
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function DecisionTreeWithPackageParty end
                
        /*
        #函式說明:
        #依據樣本內容進行選項內容次數的統計
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常.
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["content"],回傳的內容
        #$result["content"][$i]["title"],第$+1個欄位的題目。
        #$result["content"][$i][$j]["optionValue"],第$+1個欄位的第$j+1個選項的內容。
        #$result["content"][$i][$j]["optionCount"],第$+1個欄位的第$j+1個選項的出現頻率。
        #$result["content"][$i][$j]["optionPercent"],第$+1個欄位的第$j+1個選項的出現次數所佔全部選項的百分比。
        #$result["content"]["questCount"],題目計數
        #必填參數:
        #$conf["csvFileAddress"],字串,csv檔的位置與名稱
        $conf["csvFileAddress"]=".csv";
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #參考資料:
        #R的敘述統計=>http://netstat.stat.tku.edu.tw/desc.php
        #備註:
        #目前欄位中文名稱讀出來會變成亂碼,因此建議交由php讀檔時就取得其欄位中文名稱
        */
        public static function describedStatistic(&$conf){
                
                #初始化要回傳的結果
                $result=array();
                
                #取得當前執行函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                $conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFileAddress","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
                unset($conf["variableCheck.isexistMulti"]);                     
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查失敗
                if($checkResult["passed"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查csv檔案是否存在
                #涵式說明:檢查多個檔案與資料夾是否存在.
                #回傳的結果:
                #$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
                #$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
                #必填的參數:
                $conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["csvFileAddress"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
                #參考資料來源:
                #http://php.net/manual/en/function.file-exists.php
                #http://php.net/manual/en/control-structures.foreach.php
                $checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
                unset($conf["fileAccess.checkMultiFileExist"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果檢查失敗
                if($checkResult["varExist"][0]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #讀取csv檔案的內容
                #回傳得結果:
                #$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函數名稱.
                #$result["csvFileContent"],csv檔案內容的陣列.
                        #$result["csvFileContent"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
                        #如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["csvFileContent"]["第幾列"]["第一列各個欄位的名稱"]
                #$result["lineArray"],csv檔案逐列內容的陣列.
                #$result["lineArrayCount"],總共幾列資料.
                #必填的參數:
                $conf["csv.loadCsvFile"]["csvFilePositionAndName"]=$conf["csvFileAddress"];#csv檔案的位置
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["csv.loadCsvFile"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                $conf["csv.loadCsvFile"]["firstLineVarName"]="false";#第一行是否爲變數名稱(各個欄位的名稱)
                #參考資料來源:
                #http://www.php.net/manual/en/function.str-split.php
                #參考資料來源
                #http://chuangmaster.pixnet.net/blog/post/33560606-%5B%E8%BD%89%E8%B2%BC%5D%E9%97%9C%E6%96%BC%E5%9B%9E%E8%BB%8A(%5Cr)%E8%88%87%E6%8F%9B%E8%A1%8C(%5Cn)
                $readCsvResult=csv::loadCsvFile($conf["csv.loadCsvFile"]);
                unset($conf["csv.loadCsvFile"]);
                
                #var_dump($readCsvResult);
                
                #如果 $readCsvResult["status"] 等於 "false"
                if($readCsvResult["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$readCsvResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #宣告儲存csv檔標題欄名稱的陣列
                $columnNameList=array();
                
                #迴圈從i等等於1到不小於count($readCsvResult["csvFileContent"][0])為止
                #亦即第二欄到最後一欄
                for($i=1;$i<count($readCsvResult["csvFileContent"][0]);$i++){
                        
                        #紀錄第$i+1欄的欄位名稱
                        $columnNameList[]=$readCsvResult["csvFileContent"][0][$i];
                        
                        }#for end
                
                #初始化要寫入到R腳本的逐行內容
                $dataToWrite=array();
                
                #讀取 $conf["csvFileAddress"] 檔案,進行敘述性統計
                $dataToWrite[]="data=read.csv(file=\"".$conf["csvFileAddress"]."\",header=TRUE)";
                
                #取得csv檔有幾欄內容
                $dataToWrite[]="columnCount=dim(data)[2]";
                
                #迴圈開始,執行第2欄到第 columnCount 欄
                $dataToWrite[]="for(i in 2:columnCount){";
                
                #迴圈內容
                #對第i欄進行敘述行統計
                #印出來
                $dataToWrite[]="write.table(table(data[i]),sep=\",\")";
                
                #迴圈結束
                $dataToWrite[]="}";
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-describedStatistic.R";#R檔案的位置與名稱
                $conf["R.writeRfile"]["textToWrite"]=$dataToWrite;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $createRscriptResult=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #如果建立 R腳本 失敗
                if($createRscriptResult["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$createRscriptResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["R.executeR"]["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$createRscriptResult["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["R.executeR"]["disbaleOptimal"]="true";
                $excuteRscriptResult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行 R腳本 失敗
                if($excuteRscriptResult["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$excuteRscriptResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #debug
                #var_dump($excuteRscriptResult);
                        
                #宣告識別要開始抓取內容的旗標變數
                $columnStatisticData=array();
                        
                #初始化欄位計數
                $columnCount=-1;
                
                #初始化選項計數
                $optionCount=1; 
                
                #解析從R取得的結果
                for($i=5;$i<count($excuteRscriptResult["lineArray"]);$i++){
                        
                        #如果讀到 ""Var1","Freq""
                        if($excuteRscriptResult["lineArray"][$i]=="\"Var1\",\"Freq\""){
                                
                                #欄位計數加1
                                $columnCount++;
                                
                                #初始化選項計數
                                $optionCount=1;
                                
                                #跳過該次迴圈
                                continue;
                                
                                }#if end
                                
                        #如果讀到 "Freq"
                        if($excuteRscriptResult["lineArray"][$i]=="\"Freq\""){
                                
                                #欄位計數加1
                                $columnCount++;
                                
                                #初始化選項計數
                                $optionCount=1;
                                
                                #跳過該次迴圈
                                continue;
                                
                                }#if end
                                
                        #取得題目
                        $columnStatisticData[$columnCount]["title"]=$columnNameList[$columnCount];
                        
                        #取得要解析的字串       
                        $dataNeedToFilted=$excuteRscriptResult["lineArray"][$i];
                        
                        #debug
                        #var_dump($dataNeedToFilted);
                        
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess.spiltString"]["stringIn"]=$dataNeedToFilted;#要處理的字串。
                        $conf["stringProcess.spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割
                        $spiltedStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                        unset($conf["stringProcess.spiltString"]);
                        
                        #debug
                        #var_dump($spiltedStr);
                        
                        #若 $spiltedStr["status"] 等於 "false"
                        if($spiltedStr["status"]=="false"){
                                
                                #設置執行失敗
                                $result["status"]="false";
                                
                                #設置執行錯誤
                                $result["error"]=$spiltedStr;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #如果 $spiltedStr["dataCounts"]<=1
                        if($spiltedStr["dataCounts"]<=1){
                                
                                #欄位計數加1
                                #$columnCount++;
                                
                                #跳過該次迴圈
                                continue;
                                
                                }#if end
                        
                        #處理選項名稱不必要的內容
                        #涵式說明:
                        #處理字串避免網頁出錯
                        #回傳的結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["function"],當前執行的函數.
                        #$result["content"],爲處理好的字串.
                        #$result["error"],錯誤訊息陣列.
                        #必填的參數:
                        $conf["stringProcess.correctCharacter"]["stringIn"]=$spiltedStr["dataArray"][1];#爲要處理的字串
                        #可省略的參數:
                        $conf["stringProcess.correctCharacter"]["selectedCharacter"]=array("\"");#爲被選擇要處理的字串/字元,須爲陣列值。
                                #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                        $conf["stringProcess.correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                        $spiltedStr["dataArray"][1]=stringProcess::correctCharacter($conf["stringProcess.correctCharacter"]);
                        unset($conf["stringProcess.correctCharacter"]);
                
                        #如果修正內容失敗
                        if($spiltedStr["dataArray"][1]["status"]=="false"){
                                
                                #設置執行失敗
                                $result["status"]="false";
                                
                                #設置執行錯誤
                                $result["error"]=$spiltedStr["dataArray"][1];
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                
                        #如果選項爲 $spiltedStr["dataArray"][1]["content"] 等於 ""
                        if($spiltedStr["dataArray"][1]["content"]==""){
                                
                                #設爲空值
                                $spiltedStr["dataArray"][1]["content"]="空值";
                                
                                }#if end
                
                        #處理選項名稱不必要的內容
                        #涵式說明:
                        #處理字串避免網頁出錯
                        #回傳的結果:
                        #$result,爲處理好的字串。
                        #必填的參數:
                        $conf["stringProcess.correctCharacter"]["stringIn"]=$spiltedStr["dataArray"][2];#爲要處理的字串
                        #可省略的參數:
                        $conf["stringProcess.correctCharacter"]["selectedCharacter"]=array("\"");#爲被選擇要處理的字串/字元,須爲陣列值。
                                #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                        $conf["stringProcess.correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                        $spiltedStr["dataArray"][2]=stringProcess::correctCharacter($conf["stringProcess.correctCharacter"]);
                        unset($conf["stringProcess.correctCharacter"]);
                
                        #如果修正內容失敗
                        if($spiltedStr["dataArray"][2]["status"]=="false"){
                                
                                #設置執行失敗
                                $result["status"]="false";
                                
                                #設置執行錯誤
                                $result["error"]=$spiltedStr["dataArray"][2];
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #以整數key紀錄選項名稱
                        $columnStatisticData[$columnCount][$optionCount]["optionValue"]=$spiltedStr["dataArray"][1]["content"];
                        
                        #以整數key紀錄選項頻率
                        $columnStatisticData[$columnCount][$optionCount]["optionCount"]=$spiltedStr["dataArray"][2]["content"];
                        
                        #選項計數加1
                        $optionCount++;
                        
                        #debug
                        #var_dump($columnStatisticData[$columnCount]);
                        
                        #排序含有選項名稱與頻率的二維陣列
                        #函數說明:
                        #排序含有多資訊的二維陣列
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["function"],當前執行的function名稱
                        #$result["error"],錯誤訊息陣列.
                        #$result["content"],處理好的字串.
                        #必填參數:
                        #$conf["arrays.arrangeTwoDmensionArray"]["unArrangeArray"],參考二維陣列,要的排序二維陣列。
                        $conf["arrays.arrangeTwoDmensionArray"]["unArrangeArray"]=&$columnStatisticData[$columnCount];
                        #$conf["arrays.arrangeTwoDmensionArray"]["compareKey"],字串,儲存用來比較大小的一維陣列key名稱。
                        $conf["arrays.arrangeTwoDmensionArray"]["compareKey"]="optionCount";
                        #可省參數:
                        #$conf["arrays.arrangeTwoDmensionArray"]["type"],字串,排序的類型,"asc"代表遞增,"desc"代表遞減,預設為"desc"。
                        $conf["arrays.arrangeTwoDmensionArray"]["type"]="desc";
                        $arrangedResult=arrays::arrangeTwoDmensionArray($conf["arrays.arrangeTwoDmensionArray"]);
                        unset($conf["arrays.arrangeTwoDmensionArray"]);
                        
                        #如果排序失敗
                        if($arrangedResult["status"]=="false"){
                                
                                #設置執行失敗
                                $result["status"]="false";
                                
                                #設置執行錯誤
                                $result["error"]=$arrangedResult;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                 
                        }#for end
                        
                #debug
                #var_dump(count($columnStatisticData)); 
                        
                #計算每個題目各選項所佔的百分比  
                for($i=0;$i<count($columnStatisticData);$i++){
                        
                        #初始化總共的選項填達次數
                        $total=0;
                        
                        #如果該題有填答的記錄
                        if(isset($columnStatisticData[$i])){
                        
                                #有幾個選項就執行幾次
                                #-1是因爲title的關係
                                for($j=1;$j<=count($columnStatisticData[$i])-1;$j++){
                                        
                                        #如果 $columnStatisticData[$i][$j]["optionValue"] 不等於 "空值"
                                        if($columnStatisticData[$i][$j]["optionValue"]!="空值"){
                                        
                                                #加總填達次數
                                                $total=$total+$columnStatisticData[$i][$j]["optionCount"];
                                        
                                                }#if end
                                        
                                        }#for end
                                
                                #有幾個選項就執行幾次
                                for($j=1;$j<count($columnStatisticData[$i]);$j++){
                                        
                                        #如果 $columnStatisticData[$i][$j]["optionValue"] 不等於 "空值"
                                        if($columnStatisticData[$i][$j]["optionValue"]!="空值"){
                                        
                                                #取得選項的填達比率
                                                $columnStatisticData[$i][$j]["optionPercent"]=$columnStatisticData[$i][$j]["optionCount"]/$total;
                                        
                                                }#if end
                                        
                                        }#for end
                                
                                }#if end
                                
                        }#for end
                        
                #設置要回傳的內容
                $result["content"]=$columnStatisticData;
                
                #取得題項數目的計數
                $result["content"]["questCount"]=count($result["content"]);
                
                #設置執行成功
                $reuslt["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function decriptionStatistic end
        
        /*
        #函式說明:
        #繪製圓餅圖
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["content"],放置圖片的語法
        #$result["img"],圖表的位置與名稱
        #必填參數:
        #$conf["percentArray"],要變成圓餅圖的數據,R會自動計算比例.
        $conf["percentArray"]=array();
        #$conf["labels"],字串陣列,比例名稱.
        $conf["labels"]=array();
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["pngFileName"],字串,圖片存放的位置與名稱,預設爲 "pie-".$SESSION["username"]."png"
        #$conf["pngFileName"]=".R/pie-".$SESSION["username"]."png";
        #$conf["pieTitle"],字串,圓餅圖的標題,預設爲空。
        #$conf["pieTitle"]="";
        #參考資料:
        #無.
        #備註:
        #無
        */
        public static function createPie(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查必填的參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                $conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","percentArray","labels");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
                unset($conf["variableCheck.isexistMulti"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $_SESSION["username"] 不存在
                if(!isset($_SESSION["username"])){
                        
                        #設為"NULL"
                        $_SESSION["username"]="NULL";
                        
                        }#if end
                
                #檢查可省略的參數
                #函式說明:
                #檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
                #必填參數:
                #$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?
                $conf["variableCheck.checkSkipableVarType"]["checkedVar"]=$conf;
                #$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
                $conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"]=array("pngFileName","pieTitle");
                #$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?
                $conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("string","string");
                #$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
                $argu=&$conf;
                #可省略參數:
                #$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
                $conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/pie-".$_SESSION["username"].".png"," ");
                #無
                $checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
                unset($conf["variableCheck.checkSkipableVarType"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #初始化 percent 字串
                $percent="percent=c(";
                
                #初始化 labels 字串
                $labels="labels=c(";
                
                #有幾個比例陣列就執行幾次
                for($i=0;$i<count($conf["percentArray"]);$i++){
                        
                        #如果不是最後一個比例
                        if($i!=count($conf["percentArray"])-1){
                                
                                #串接比例,結尾加逗號
                                $percent=$percent.$conf["percentArray"][$i].",";
                                
                                #串接比例名稱,結尾加逗號
                                $labels=$labels."\"".$conf["labels"][$i]."\",";
                                
                                }#if end
                                
                        #反之是最後一個比例
                        else{
                                
                                #串接比例,最後面加上)
                                $percent=$percent.$conf["percentArray"][$i].")";
                                
                                #串接比例名稱,最後面加上)
                                $labels=$labels."\"".$conf["labels"][$i]."\")";
                                
                                }#else end
                        
                        }#for end
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R.writeRfile"]["addAndName"]=".R/pie-".$_SESSION["username"].".R";#R檔案的位置與名稱
                $conf["R.writeRfile"]["textToWrite"][]="#pie圓餅圖";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#比例資料,總和須爲1";
                $conf["R.writeRfile"]["textToWrite"][]=$percent;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#比例資料對應的名稱向量";
                $conf["R.writeRfile"]["textToWrite"][]=$labels;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#轉換成UTF-8";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(labels)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#設置圖片輸出的設定";
                $conf["R.writeRfile"]["textToWrite"][]="svg(filename=\"".$conf["pngFileName"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#繪製圓餅圖";
                $conf["R.writeRfile"]["textToWrite"][]="#比例資料爲 percent 向量";
                $conf["R.writeRfile"]["textToWrite"][]="#比例資料的名稱爲 labels 向量";
                $conf["R.writeRfile"]["textToWrite"][]="#從12點開始順時針依據少到多排序";
                $conf["R.writeRfile"]["textToWrite"][]="#圖的標題爲 \"系統整體感覺\"";
                $conf["R.writeRfile"]["textToWrite"][]="pie(percent,label=labels,clockwise=1,main=\"".$conf["pieTitle"]."\");";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#關閉繪圖裝置";
                $conf["R.writeRfile"]["textToWrite"][]="dev.off()";
                #$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #如果R腳本檔建立失敗
                if($rScriptCreateResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$rScriptCreateResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #執行R腳本
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$rScriptCreateResult["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["disbaleOptimal"]="true";
                $executeRresult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行R失敗
                if($executeRresult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$executeRresult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #檢查圖片檔案是否有產生
                #涵式說明:檢查多個檔案與資料夾是否存在.
                #回傳的結果:
                #$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
                #$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
                #必填的參數:
                $conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["pngFileName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
                #參考資料來源:
                #http://php.net/manual/en/function.file-exists.php
                #http://php.net/manual/en/control-structures.foreach.php
                $fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
                unset($conf["fileAccess.checkMultiFileExist"]);
                
                #如果檢查圖片失敗
                if($fileCheckResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$fileCheckResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果要產生的圖片不存在
                if($fileCheckResult["varExist"][0]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$fileCheckResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得圖表的位置與名稱
                $result["img"]=$conf["pngFileName"];    
                        
                #函數說明:
                #用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息
                #$result["content"],圖片的連結資訊
                #$result["function"],當前執行的函數名稱 
                #必填參數:
                #$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
                $conf["img::data"]["imgPosition"]=$conf["pngFileName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["img::data"]["fileArgu"]=$conf["fileArgu"];
                #可省略參數:
                #$conf["alt"],若沒有圖片要用什麼文字顯示。
                #$conf["alt"]="";
                #$conf["style"],字串陣列,要使用的style,key為樣式名稱,value為樣式值.
                $conf["img::data"]["style"]=array("width"=>"100%");
                #$conf["class"],圖片要套用的css樣式名稱.
                #$conf["class"]="";
                #$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
                $conf["img::data"]["mimeType"]="image/svg+xml";
                #$conf["compressType"],2元碼壓縮的方式,預設為"base64".
                #$conf["compressType"]="base64";
                #$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
                #$conf["img::data"]["delImg"]="false";
                #參考資料:
                #將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
                #壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
                $data=img::data($conf["img::data"]);
                unset($conf["img::data"]);
                        
                #如果顯示圖片失敗
                if($data["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$data;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end        
                                                
                #取得顯示圖片的語法
                $result["content"]=$data["content"];
                                                
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result; 
                
                }#function createPie end
                
        /*
        #函式說明:
        #繪製長條圖
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["img"],圖片的位置與名稱
        #$result["content"],放置圖表的語法
        #必填參數:
        #$conf["countArray"],字串陣列,每個要呈現資料的次數,請輸入大於零的整數.
        $conf["countArray"]=array();
        #$conf["countNameArray"],字串陣列,每個要呈現資料的名稱.
        $conf["countNameArray"]=array();
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["imgFileName"],字串,圖片存放的位置與名稱,預設爲 "pie-".$SESSION["username"].".png",若 $SESSION["username"] 不存在則會用 "NULL" 替代
        #$conf["imgFileName"]=".R/barplot-".$SESSION["username"].".png";
        #$conf["del"],字串,是否要讀取完圖片後就把圖片檔案移除,"false"代表不要,"true"代表要,預設為"true".
        #$conf["del"]="true";
        #$conf["barPlotTitle"],字串,長條圖的標題,預設爲空。
        #$conf["barPlotTitle"]="";
        #$conf["xlabName"],x軸的名稱,預設爲項目
        #$conf["xlabName"]="項目";
        #$conf["ylabName"],y軸的名稱,預設爲頻率
        #$conf["ylabName"]="頻率";
        #$conf["autoRadioByCountArray"],字串,是否要自動計算與呈現每個項目在當前長條所有項目中的比例,"true"為要顯示,"false"為不顯示,預設為"true".
        #$conf["autoRadioByCountArray"]="true";
        #$conf["disableText"],字串,是否要取消圖例的顯示,直接顯示項目名稱在長條圖裡面,"true"代表要取消圖例,"false"代表不取消圖例,預設為"false".
        #$conf["disableText"]="true";
        #$conf["picWidth"],字串,圖片的寬度(px),預設為不指定.
        #$conf["picWidth"]="";
        #$conf["picHeight"],字串,圖片的高度(px),預設為不指定.
        #$conf["picHeight"]="";
        #$conf["line"],二維字串陣列,代表要在圖上面畫幾條線
        #$conf["line"]=array();
        #$conf["line"][$i],一維字串陣列,代表要在圖上劃第$i+1條線的資訊
        #$conf["line"][$i]["startX"],整數,代表線條起始點的X軸坐標.
        #$conf["line"][$i]["startY"],整數,代表線條起始點的Y軸坐標.
        #$conf["line"][$i]["endX"],整數,代表線條終點的X軸坐標.
        #$conf["line"][$i]["endY"],整數,代表線條終點的Y軸坐標.
        #$conf["line"][$i]["color"],顏色,目前有black,green,red三種
        #參考資料:
        #無.
        #備註:
        #無
        */
        public static function createBarPlot(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查必填的參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                $conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","countArray","countNameArray");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","array");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
                unset($conf["variableCheck.isexistMulti"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $_SESSION["username"] 不存在
                if(!isset($_SESSION["username"])){
                        
                        #設為"NULL"
                        $_SESSION["username"]="NULL";
                        
                        }#if end
                
                #取得最高的頻率
                #涵式說明:
                #找最大值,結果會回傳最大值.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"為正常,"false"為不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函數名稱.
                #$result["key"],最大值原先的key.
                #$result["value"],最大值的數字.
                #必填的參數:
                $conf["math::getMaxValue"]["rawDataArray"]=$conf["countArray"];#爲原始數據
                $getMaxValue=math::getMaxValue($conf["math::getMaxValue"]);
                unset($conf["math::getMaxValue"]);
                
                #如果取得最大值失敗
                if($getMaxValue["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$getMaxValue;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #取得頻率最大值
                $maxFreq=$getMaxValue["value"];
                
                #取得最低的頻率
                #涵式說明
                #找最小值,結果會回傳最小值
                #回傳的內容
                #$result["status"],執行是否正常,"true"為正常,"false"為不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函數名稱.
                #$result["key"],最大值原先的key.
                #$result["value"],陣列裏面最小的數值.
                #必填的參數:
                $conf["max::getMinValue"]["rawDataArray"]=$conf["countArray"];#爲原始數據
                $getMinValue=math::getMinValue($conf["max::getMinValue"]);
                unset($conf["max::getMinValue"]);
                
                #如果取得最小值失敗
                if($getMinValue["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$getMaxValue;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #取得頻率最小值
                $minFreq=$getMinValue["value"];
                
                #debug
                #var_dump($maxFreq);
                #var_dump($minFreq);
                
                #檢查可省略的參數
                #函式說明:
                #檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
                #必填參數:
                #$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?
                $conf["variableCheck.checkSkipableVarType"]["checkedVar"]=$conf;
                #$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
                $conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"]=array("imgFileName","del","barPlotTitle","xlabName","ylabName","autoRadioByCountArray","picWidth","picHeight","line","disableText");
                #$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?
                $conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("string","del","string","string","string","string","string","string","array","string");
                #$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
                $argu=&$conf;
                #可省略參數:
                #$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,null代表不指定.
                $conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/barplot-".$_SESSION["username"].".png","true"," ","項目","頻率","true",null,null,null,"false");
                #無
                $checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
                unset($conf["variableCheck.checkSkipableVarType"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #初始化總頻率
                $totalCount=0;
                
                #有幾個要統計的物件陣列就執行幾次
                for($i=0;$i<count($conf["countArray"]);$i++){
                        
                        #加總頻率
                        $totalCount=$totalCount+$conf["countArray"][$i];
                        
                        }#for end       
                        
                #初始化 $counts 字串
                $counts="count=c(";
                
                #初始化 $labels 字串
                $labels="timeLabel=c(";
                
                #初始化 $legendStr 字串
                $legendStr="legendStr=c(";
                                
                #有幾個要統計的物件陣列就執行幾次
                for($i=0;$i<count($conf["countArray"]);$i++){
                        
                        #如果不是最後一個要統計的物件
                        if($i!=count($conf["countArray"])-1){
                                
                                #串接頻率,結尾加逗號
                                $counts=$counts."".$conf["countArray"][$i].",";
                                
                                #如果 $conf["autoRadioByCountArray"] 等於 "true"
                                if($conf["autoRadioByCountArray"]=="true"){
                                        
                                        #串接含有比例的輔助說明文字,結尾加逗號
                                        $legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].",比例=".round($conf["countArray"][$i]/$totalCount,2).")\",";
                                        
                                        }#if end
                                
                                #反之
                                else{
                                        
                                        #串接輔助說明文字,結尾加逗號
                                        $legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].")\",";
                                        
                                        }#else end
                                
                                #如果要取消圖例
                                if($conf["disableText"]=="true"){
                                        
                                        #如果 $conf["autoRadioByCountArray"] 等於 "true"
                                        if($conf["autoRadioByCountArray"]=="true"){
                                        
                                                #串接項目的名稱
                                                $labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."(比例=".round($conf["countArray"][$i]/$totalCount,2).")\",";
                                                
                                                }#if end
                                        
                                        #反之 不需要比例資訊   
                                        else{
                                                
                                                #串接項目的名稱
                                                $labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."\",";
                                                
                                                }#else end
                                                                                        
                                        }#if end
                                        
                                #反之不要取消圖例       
                                else{
                                        
                                        #串接物件名稱,結尾加逗號
                                        $labels=$labels."\"".$i."\",";
                                        
                                        }#else end
                                                        
                                }#if end
                                
                        #反之是最後一個物件
                        else{
                                
                                #串接頻率,最後面加上)
                                $counts=$counts.$conf["countArray"][$i].")";
                                
                                #如果 $conf["autoRadioByCountArray"] 等於 "true"
                                if($conf["autoRadioByCountArray"]=="true"){
                                        
                                        #串接含有比例的輔助說明文字
                                        $legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].",比例=".round($conf["countArray"][$i]/$totalCount,2).")\")";
                                        
                                        }#if end
                                
                                #反之
                                else{
                                        
                                        #串接含有比例的輔助說明文字
                                        $legendStr=$legendStr."\"".$i."->".$conf["countNameArray"][$i]."(".$conf["ylabName"]."=".$conf["countArray"][$i].")\")";
                                        
                                        }#else end
                                                
                                #如果要取消圖例
                                if($conf["disableText"]=="true"){
                                        
                                        #如果 $conf["autoRadioByCountArray"] 等於 "true"
                                        if($conf["autoRadioByCountArray"]=="true"){
                                        
                                                #串接項目的名稱
                                                $labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."(比例=".round($conf["countArray"][$i]/$totalCount,2).")\")";
                                                
                                                }#if end
                                        
                                        #反之不要比例資訊       
                                        else{
                                                
                                                #串接項目的名稱
                                                $labels=$labels."\"".$conf["countNameArray"][$i]."\r\n".$conf["ylabName"]."=".$conf["countArray"][$i]."\")";
                                                
                                                }#else end
                                                                                
                                        }#if end                
                                        
                                #反之不要取消圖例       
                                else{
                                        
                                        #串接物件名稱,最後面加上)
                                        $labels=$labels."\"".$i."\")";
                                        
                                        }#else end      
                                                                
                                }#else end
                                                        
                        }#for end
                        
                #$conf["line"]=array();
                #$conf["line"][$i],一維字串陣列,代表要在圖上劃第$i+1條線的資訊
                #$conf["line"][$i]["startX"],整數,代表線條起始點的X軸坐標.
                #$conf["line"][$i]["startY"],整數,代表線條起始點的Y軸坐標.
                #$conf["line"][$i]["endX"],整數,代表線條終點的X軸坐標.
                #$conf["line"][$i]["endY"],整數,代表線條終點的Y軸坐標.      
                #$conf["line"][$i]["color"],顏色,目前有black,green,red三種       
                
                #初始化儲存劃線R語法陣列
                $line=array();  
                        
                #如果 $conf["line"] 有設定
                if(isset($conf["line"])){
                        
                        #有幾條線就執行幾次
                        for($i=0;$i<count($conf["line"]);$i++){
                                
                                #設置線條的x軸啟起點與終點坐標
                                $line[]="#設置線條的x軸啟起點與終點坐標";
                                $line[]="xp=c(".$conf["line"][$i]["startX"].",".$conf["line"][$i]["endX"].")";
                                
                                #設置線條的y軸啟起點與終點坐標
                                $line[]="#設置線條的y軸啟起點與終點坐標";
                                $line[]="yp=c(".$conf["line"][$i]["startY"].",".$conf["line"][$i]["endY"].")";
                                
                                #判斷 $conf["line"][$i]["color"]
                                switch($conf["line"][$i]["color"]){
                                        
                                        #如果是 "black"
                                        case "black":
                                        
                                                #劃線
                                                $line[]="#劃線";
                                                $line[]="lines(xp,yp)";
                                                                                
                                                #跳出 switch
                                                break;
                                                
                                        #如果是 "green"
                                        case "green":
                                        
                                                #劃綠色的線
                                                $line[]="#劃線綠色的線";
                                                $line[]="lines(xp,yp,col=3)";
                                                
                                                #跳出 switch
                                                break;
                                                
                                        #如果是 "red"
                                        case "red":
                                        
                                                #劃紅色的線
                                                $line[]="#劃線紅色的線";
                                                $line[]="lines(xp,yp,col=2)";
                                        
                                                #跳出 switch
                                                break;
                                                
                                        #如果是其他
                                        default:
                                        
                                                #設置執行不正常
                                                $result["status"]="false";
                                                
                                                #設置執行錯誤訊息
                                                $result["error"][]="未知的顏色:".$conf["line"][$i]["color"];
                                                
                                                #回傳結果
                                                return $result;
                                        
                                        }#switch end
                                                                        
                                }#for end
                        
                        }#if end        
                        
                #如果有設置圖片寬度
                if(isset($conf["picWidth"])){
                        
                        #設置圖片寬度的語法
                        $conf["picWidth"]=",width=\"".$conf["picWidth"]."\"";
                        
                        }#if end        
                        
                #反之
                else{
                        
                        #不設置圖片寬度
                        $conf["picWidth"]="";
                        
                        }#else end
                        
                #如果有設置圖片寬度
                if(isset($conf["picHeight"])){
                        
                        #設置圖片寬度的語法
                        $conf["picHeight"]=",Height=\"".$conf["picHeight"]."\"";
                        
                        }#if end        
                        
                #反之
                else{
                        
                        #不設置圖片寬度
                        $conf["picHeight"]="";
                        
                        }#else end
                        
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $conf["R.writeRfile"]["addAndName"]=".R/barplot-".$_SESSION["username"].".R";#R檔案的位置與名稱
                $conf["R.writeRfile"]["textToWrite"][]="#barplot長條圖";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#欲繪出的資料頻率名稱";
                $conf["R.writeRfile"]["textToWrite"][]=$labels;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(timeLabel)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#欲繪出的輔助說明內容";
                $conf["R.writeRfile"]["textToWrite"][]=$legendStr;
                $conf["R.writeRfile"]["textToWrite"][]="";                                      
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(legendStr)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#要繪出的資料頻率";
                $conf["R.writeRfile"]["textToWrite"][]=$counts;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#設置圖片輸出的設定";
                $conf["R.writeRfile"]["textToWrite"][]="svg(filename=\"".$conf["imgFileName"]."\"".$conf["picWidth"].$conf["picHeight"].")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#長條圖的標題";
                $conf["R.writeRfile"]["textToWrite"][]="barplotMain=c(\"".$conf["barPlotTitle"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(barplotMain)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#x軸標題";
                $conf["R.writeRfile"]["textToWrite"][]="xlabStr=c(\"".$conf["xlabName"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(xlabStr)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#y軸標題";
                $conf["R.writeRfile"]["textToWrite"][]="ylabStr=c(\"".$conf["ylabName"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(ylabStr)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#繪製長條圖";
                $conf["R.writeRfile"]["textToWrite"][]="#頻率資料爲count";
                $conf["R.writeRfile"]["textToWrite"][]="#頻率名稱資料爲timeLabel";
                $conf["R.writeRfile"]["textToWrite"][]="#圖的標題爲 \"一年內的每月的分佈\"";
                $conf["R.writeRfile"]["textToWrite"][]="#x軸標題爲 xlabStr";
                $conf["R.writeRfile"]["textToWrite"][]="#y軸標題爲 ylabStr";
                $conf["R.writeRfile"]["textToWrite"][]="#註解文字為 legendStr";
                
                #如果要取消圖例
                if($conf["disableText"]=="true"){
                        
                        #產生沒有圖例的長條圖
                        $conf["R.writeRfile"]["textToWrite"][]="barplot(count,names=timeLabel,main=barplotMain,xlab=xlabStr,ylab=ylabStr)";
                        
                        }#if end
                
                #反之代表不取消圖例
                else{
                
                        #產生有圖例的長條圖
                        $conf["R.writeRfile"]["textToWrite"][]="barplot(count,names=timeLabel,main=barplotMain,xlab=xlabStr,ylab=ylabStr,legend.text=legendStr)";
                
                        }#else end
                
                $conf["R.writeRfile"]["textToWrite"][]="";
                
                #$line有幾個元素就執行幾次迴圈
                for($i=0;$i<count($line);$i++){
                        
                        #存入劃線的R語法
                        $conf["R.writeRfile"]["textToWrite"][]=$line[$i];
                        
                        }#for end
                                        
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#關閉繪圖裝置";
                $conf["R.writeRfile"]["textToWrite"][]="dev.off()";
                #$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];;
                $rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #如果R腳本檔建立失敗
                if($rScriptCreateResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$rScriptCreateResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #執行R腳本
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$rScriptCreateResult["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["disbaleOptimal"]="true";
                $executeRresult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行R失敗
                if($executeRresult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$executeRresult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #檢查圖片檔案是否有產生
                #涵式說明:檢查多個檔案與資料夾是否存在.
                #回傳的結果:
                #$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
                #$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
                #必填的參數:
                $conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["imgFileName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
                #參考資料來源:
                #http://php.net/manual/en/function.file-exists.php
                #http://php.net/manual/en/control-structures.foreach.php
                $fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
                unset($conf["fileAccess.checkMultiFileExist"]);
                
                #如果要產生的圖片不存在
                if($fileCheckResult["varExist"][0]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$fileCheckResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得圖片位置與名稱
                $result["img"]=$conf["imgFileName"];
                        
                #函數說明:
                #用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息
                #$result["content"],圖片的連結資訊
                #$result["function"],當前執行的函數名稱 
                #必填參數:
                #$conf["img::data"]["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
                $conf["img::data"]["imgPosition"]=$conf["imgFileName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["img::data"]["fileArgu"]=$conf["fileArgu"];
                #可省略參數:
                #$conf["alt"],若沒有圖片要用什麼文字顯示。
                #$conf["alt"]="";
                #$conf["style"],字串陣列,要使用的style,key為樣式名稱,value為樣式值.
                $conf["img::data"]["style"]=array("width"=>"100%");
                #$conf["class"],圖片要套用的css樣式名稱.
                #$conf["class"]="";
                #$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
                $conf["img::data"]["mimeType"]="image/svg+xml";
                #$conf["compressType"],2元碼壓縮的方式,預設為"base64".
                #$conf["compressType"]="base64";
                #$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
                $conf["img::data"]["delImg"]=$conf["del"];
                #參考資料:
                #將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
                #壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
                $data=img::data($conf["img::data"]);
                unset($conf["img::data"]);      
                        
                #如果顯示圖片失敗
                if($data["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$data;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end        
                                                
                #取得顯示圖片的語法
                $result["content"]=$data["content"];    
                        
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result; 
                
                }#function createBarPlot end
                
        /*
        #函式說明
        #繪製直方圖
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["img"],圖片的位置與名稱
        #$result["content"],放置圖片的語法
        #必填參數:
        #$conf["numArray"],字串陣列,要進行分組統計的原始資料
        $conf["numArray"]=array();
        #$conf["classCount"],字串,資料要分成幾組
        $conf["classCount"]="5"; 
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["imgFileName"],字串,圖片存放的位置與名稱,預設爲 "hist-".$SESSION["username"]."svg"
        #$conf["imgFileName"]=".R/hist-".$SESSION["username"]."svg";
        #$conf["del"],字串,讀取完圖片之後是否要移除之,"ture"代表要,"false"代表不要,預設為"true"代表要.
        #$conf["del"]="";
        #$conf["histTitle"],字串,長條圖的標題,預設爲空。
        #$conf["histTitle"]="";
        #$conf["xlabName"],x軸的名稱,預設爲區間
        #$conf["xlabName"]="區間";
        #$conf["ylabName"],y軸的名稱,預設爲頻率
        #$conf["ylabName"]="頻率";
        #參考資料:
        #無.
        #備註:
        #無
        */
        public static function createHist(&$conf=array()){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查必填的參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                $conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck.isexistMulti"]["variableCheck"]=array("numArray","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck.isexistMulti"]["variableType"]=array("array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
                unset($conf["variableCheck.isexistMulti"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查可省略的參數
                #函式說明:
                #檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
                #必填參數:
                #$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?
                $conf["variableCheck.checkSkipableVarType"]["checkedVar"]=$conf;
                #$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
                $conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"]=array("imgFileName","del","histTitle","xlabName","ylabName");
                #$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?
                $conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("string","string","string","string","string");
                #$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
                $argu=&$conf;
                #可省略參數:
                #$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
                $conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/hist-".$_SESSION["username"].".svg","true"," ","區間","頻率");
                #無
                $checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
                unset($conf["variableCheck.checkSkipableVarType"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #初始化 要進行統計的數字資料
                $numData="numData=c(";
                
                #有幾個比例陣列就執行幾次
                for($i=0;$i<count($conf["numArray"]);$i++){
                        
                        #如果不是最後一個比例
                        if($i!=count($conf["numArray"])-1){
                                
                                #串接比例,結尾加逗號
                                $numData=$numData.$conf["numArray"][$i].",";
                                
                                }#if end
                                
                        #反之是最後一個比例
                        else{
                                
                                #串接比例,最後面加上)
                                $numData=$numData.$conf["numArray"][$i].")";
                                
                                }#else end
                        
                        }#for end
                        
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R.writeRfile"]["addAndName"]=".R/hist-".$_SESSION["username"].".R";#R檔案的位置與名稱
                $conf["R.writeRfile"]["textToWrite"][]="#hist直方圖";
                $conf["R.writeRfile"]["textToWrite"][]="#將原始數字向量進行分組";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#要分組的資料內容";
                $conf["R.writeRfile"]["textToWrite"][]=$numData;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#設置圖片輸出的設定";
                $conf["R.writeRfile"]["textToWrite"][]="svg(filename=\"".$conf["imgFileName"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#直方圖的標題";
                $conf["R.writeRfile"]["textToWrite"][]="histMain=c(\"".$conf["histTitle"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(histMain)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#x軸標題";
                $conf["R.writeRfile"]["textToWrite"][]="xlabStr=c(\"".$conf["xlabName"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(xlabStr)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#y軸標題";
                $conf["R.writeRfile"]["textToWrite"][]="ylabStr=c(\"".$conf["ylabName"]."\")";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#改用UTF-8去讀";
                $conf["R.writeRfile"]["textToWrite"][]="Encoding(ylabStr)<-\"UTF-8\"";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#繪製直方圖";
                $conf["R.writeRfile"]["textToWrite"][]="#要分組的資料爲numData";
                $conf["R.writeRfile"]["textToWrite"][]="#圖的標題爲 \"一年內的每月的分佈\"";
                $conf["R.writeRfile"]["textToWrite"][]="#x軸標題爲 \"出現月份\"";
                $conf["R.writeRfile"]["textToWrite"][]="#y軸標題爲 \"出現頻率\"";
                $conf["R.writeRfile"]["textToWrite"][]="hist(numData,nclass=".$conf["classCount"].",main=histMain,xlab=xlabStr,ylab=ylabStr)";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#關閉繪圖裝置";
                $conf["R.writeRfile"]["textToWrite"][]="dev.off()";
                #$conf["textToWrite"],要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $rScriptCreateResult=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #如果R腳本檔建立失敗
                if($rScriptCreateResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$rScriptCreateResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #執行R腳本
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$rScriptCreateResult["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["disbaleOptimal"]="true";
                $executeRresult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行R失敗
                if($executeRresult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$executeRresult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #檢查圖片檔案是否有產生
                #涵式說明:檢查多個檔案與資料夾是否存在.
                #回傳的結果:
                #$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
                #$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
                #必填的參數:
                $conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["imgFileName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
                #參考資料來源:
                #http://php.net/manual/en/function.file-exists.php
                #http://php.net/manual/en/control-structures.foreach.php
                $fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
                unset($conf["fileAccess.checkMultiFileExist"]);
                
                #如果要產生的圖片不存在
                if($fileCheckResult["varExist"][0]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$fileCheckResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得圖片位置與名稱
                $result["img"]=$conf["imgFileName"];
                        
                #函數說明:
                #用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息
                #$result["content"],圖片的連結資訊
                #$result["function"],當前執行的函數名稱 
                #必填參數:
                #$conf["img::data"]["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
                $conf["img::data"]["imgPosition"]=$conf["imgFileName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["img::data"]["fileArgu"]=$conf["fileArgu"];
                #可省略參數:
                #$conf["alt"],若沒有圖片要用什麼文字顯示。
                #$conf["alt"]="";
                #$conf["style"],字串陣列,要使用的style,key為樣式名稱,value為樣式值.
                $conf["img::data"]["style"]=array("width"=>"100%");
                #$conf["class"],圖片要套用的css樣式名稱.
                #$conf["class"]="";
                #$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
                $conf["img::data"]["mimeType"]="image/svg+xml";
                #$conf["compressType"],2元碼壓縮的方式,預設為"base64".
                #$conf["compressType"]="base64";
                #$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
                $conf["img::data"]["delImg"]=$conf["del"];
                #參考資料:
                #將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
                #壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
                $data=img::data($conf["img::data"]);
                unset($conf["img::data"]);      
                        
                #如果顯示圖片失敗
                if($data["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$data;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end        
                                                
                #取得顯示圖片的語法
                $result["content"]=$data["content"];    
                        
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function createHist end
        
        /*
        #函式說明:
        #運用apriori進行關聯分析,用來分析多個名目變數選項組合預測某個行爲的,支持度,信度,解釋力,分析結果會排除其中一個條件或結果變數爲空值者。
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["oriOutPut"],R原始的分析結果輸出
        #$result["content"],分析結果
        #$result["content"]["rulesCount"],記錄總共有幾筆關聯規則
        #$result["content"]["rulesArray"],規則的內容
        #$result["content"]["rulesArray"][$i],代表第$i+1個規則的內容陣列
        #$result["content"]["rulesArray"][$i]["lhsName"][$j],表第$i+1個規則的第$j+1個條件的名稱
        #$result["content"]["rulesArray"][$i]["lhsValue"][$j],表第$i+1個規則的第$j+1個條件名稱對應的數值內容
        #$result["content"]["rulesArray"][$i]["rhsName"][$j],表第$i+1個規則的第$j+1個結果的名稱
        #$result["content"]["rulesArray"][$i]["rhsValue"][$j],表第$i+1個規則的第$j+1個結果名稱對應的數值內容
        #$result["content"]["rulesArray"][$i]["support"],表示$i+1個規則的support值
        #$result["content"]["rulesArray"][$i]["confidence"],表示$i+1個規則的support值
        #$result["content"]["rulesArray"][$i]["lift"],表示$i+1個規則的support值
        #必填參數:
        #$conf["csvFile"],字串,要讀取的csv檔位置與名稱,欄位數量必須大於2欄.
        $conf["csvFile"]="";
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["forecastVarName"],字串,指定多個要預測變數名稱,預設不指定.
        #$conf["forecastVarName"]="";
        #$conf["forecastVarValueArray"],字串陣列,指定預測的變數要等於哪些數值,預設不指定,若指定則至少要有兩個元素.
        #$conf["forecastVarValueArray"]=array();
        #$conf["support"],字串,支持度要多少,ex:"0.05".
        #$conf["support"]="";
        #$conf["confidence"],字串,信度要多少,ex:"0.8".
        #$conf["confidence"]="";
        #參考資料:
        #無.
        #備註:
        #無
        */
        public static function apriori(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查必填參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                $conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFile","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
                unset($conf["variableCheck.isexistMulti"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查可省略的參數
                #函式說明:
                #檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
                #必填參數:
                #$conf["checkedVar"],陣列,要檢查的變數陣列名稱為?
                $conf["variableCheck.checkSkipableVarType"]["checkedVar"]=$conf;
                #$conf["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
                $conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"]=array("forecastVarName","forecastVarValueArray","support","confidence","lift");
                #$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?
                $conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("string","array","string","string","string");
                #$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
                $argu=&$conf;
                #可省略參數:
                #$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
                #$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array(".R/hist-".$_SESSION["username"].".png"," ","區間","頻率");
                #無
                $checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
                unset($conf["variableCheck.checkSkipableVarType"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #讀取csv檔標題欄位的內容
                #涵式說明:
                #讀取csv檔案的內容
                #回傳得結果:
                #$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["content"],csv檔案內容的陣列
                        #$result["content"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
                        #如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["content"]["第幾列"]["第一列各個欄位的名稱"]
                #$result["title"],欄位的名稱
                #$result["lineCount"],總共幾列資料
                #必填的參數:
                $conf["csv.read"]["csvFilePositionAndName"]=$conf["csvFile"];#csv檔案的位置
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["csv.read"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                $conf["csv.read"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)
                #參考資料來源:
                #http://www.php.net/manual/en/function.str-split.php
                #參考資料來源
                #http://php.net/manual/en/function.fgetcsv.php
                $readCsvResult=csv::read($conf["csv.read"]);
                unset($conf["csv.read"]);
                
                #如果讀取csv檔,失敗
                if($readCsvResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$readCsvResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果欄位數量沒有大於2
                if(count($readCsvResult["title"])<=2){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]="csv檔案的欄位數量須大於2";
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #取得標題欄位的內容
                $columnTitle=$readCsvResult["title"];
                
                #初始化更新標題欄位的R語法
                $updateColumnsNameStr="colnames(data)<-c(";
                
                #執行 $columnTitle 的數量次數回圈
                for($i=0;$i<count($columnTitle);$i++){
                        
                        #如果不是最後一個標題
                        if($i!=count($columnTitle)-1){
                        
                                #串接標題名稱與逗號
                                $updateColumnsNameStr=$updateColumnsNameStr."\"".$columnTitle[$i]."\",";
                        
                                }#if end
                                
                        #反之爲最後一個標題
                        else{
                                
                                #串接標題名稱與「)」
                                $updateColumnsNameStr=$updateColumnsNameStr."\"".$columnTitle[$i]."\")";
                                
                                }#else end
                        
                        }#for end
                
                #初始化要寫入到R腳本的逐行內容
                $dataToWrite=array();
                
                #設置要寫到R腳本的資料
                $dataToWrite[]="#資料探堪-關聯分析-apriori";
                $dataToWrite[]="";
                $dataToWrite[]="#匯入 arules 套件";
                $dataToWrite[]="library(arules)";
                $dataToWrite[]="";
                $dataToWrite[]="#讀取資料檔";
                $dataToWrite[]="data=read.csv(\"".$conf["csvFile"]."\")";
                $dataToWrite[]="";
                $dataToWrite[]="#更新欄位變數內容";
                $dataToWrite[]=$updateColumnsNameStr;
                $dataToWrite[]="";
                
                #初始化 aprior 的 param 字串
                $parameter="parameter=list(minlen=2";
                
                #如果存在 $conf["support"]
                if(isset($conf["support"])){
                        
                        #設置最低支持度
                        $parameter=$parameter.",support=".$conf["support"];
                        
                        }#if end
                        
                #如果存在 $conf["confidence"]
                if(isset($conf["confidence"])){
                        
                        #設置最低信度
                        $parameter=$parameter.",confidence=".$conf["confidence"];
                        
                        }#if end                
                        
                #結束 param 字串
                $parameter=$parameter.")";
                
                #如果有指定預測結果的變數與其數值內容
                if(isset($conf["forecastVarName"]) && isset($conf["forecastVarValueArray"])){
                        
                        #如果 $conf["forecastVarValueArray"] 的元素數量小於 2
                        if(count($conf["forecastVarValueArray"])<2){
                                
                                #設置執行錯誤
                                $result["status"]="false";
                                
                                #設置執行錯誤訊息
                                $result["error"][]="變數 \"forecastVarValueArray\"(apriori的RHS)至少需要兩個項目";
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        #建立皆為 $conf["forecastVarName"] 的陣列
                        #函式說明:
                        #建立一個陣列,可以指派陣列的內容,然後回傳
                        #回傳的結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["function"],當前執行的函數名稱.
                        #$result["error"],錯誤訊息陣列.
                        #$result["content"],爲陣列變數內容
                        #必填的參數:
                        $conf["arrays::create"]["arrayContent"]=array($conf["forecastVarName"]);#陣列元素的內容,須爲陣列值。
                        #可省略的參數:
                        $conf["arrays::create"]["arrayCounts"]=count($conf["forecastVarValueArray"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
                        $conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
                        $forecastVarNameArray=arrays::create($conf["arrays::create"]);
                        unset($conf["arrays::create"]);
                        
                        #如果建立 皆為 $conf["forecastVarName"] 的陣列失敗
                        if($forecastVarNameArray["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置執行錯誤訊息
                                $result["error"]=$forecastVarNameArray;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        #建立皆為 「=」 的陣列
                        #函式說明:
                        #建立一個陣列,可以指派陣列的內容,然後回傳
                        #回傳的結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["function"],當前執行的函數名稱.
                        #$result["error"],錯誤訊息陣列.
                        #$result["content"],爲陣列變數內容
                        #必填的參數:
                        $conf["arrays::create"]["arrayContent"]=array("=");#陣列元素的內容,須爲陣列值。
                        #可省略的參數:
                        $conf["arrays::create"]["arrayCounts"]=count($conf["forecastVarValueArray"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
                        $conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
                        $equalArray=arrays::create($conf["arrays::create"]);
                        unset($conf["arrays::create"]);
                        
                        #如果建立 皆為「=」的陣列失敗
                        if($equalArray["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置執行錯誤訊息
                                $result["error"]=$equalArray;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        #將 指定預測結果的變數與其數值內容 合併成一維陣列
                        #函式說明:
                        #透過多個擁有一樣數量元素的一維陣列,透過指定的連接字串,組成一組同樣數量的一維陣列。
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常。
                        #$result["error"],錯誤訊息。
                        #$result["content"],組合成新值的一維陣列。
                        #$result["function"],當前執行的函數名稱。
                        #必填參數:
                        #$conf["R::combineToNewArray"]["arrays"],二維陣列,爲要依序由哪些陣列變數來進行組合
                        $conf["R::combineToNewArray"]["arrays"]=array($forecastVarNameArray["content"],$conf["forecastVarValueArray"]);
                        #可省略參數:
                        #$conf["R::combineToNewArray"]["combineSymbolArray"],陣列字串,數量爲$conf["arrays"]減一,爲用於連結各一維陣列變數的連接字串,預設皆爲"<=>"。
                        $conf["R::combineToNewArray"]["combineSymbolArray"]=$equalArray["content"];
                        $combineToNewArray=arrays::combineToNewArray($conf["R::combineToNewArray"]);
                        unset($conf["R::combineToNewArray"]);
                                                
                        #如果合併兩個一維陣列失敗
                        if($combineToNewArray["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置執行錯誤訊息
                                $result["error"]=$combineToNewArray;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end                                        
                        
                        #組裝 $conf["forecastVarNameArray"] 與 $conf["forecastVarValueArray"] 為 $appearance
                        #涵式說明:
                        #避免超出4096bytes限制的條件下產生向量變數語法
                        #請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
                        #回傳結果:
                        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
                        #$result["error"],錯誤訊息陣列
                        #$result["function"],當前函數名稱
                        #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
                        #$result["lineCount"],用了幾列程式完成向量變數的建立
                        #必填參數:
                        #$conf["R::createFixedVectorVar"]["vectorName"],字串,向量變數在R裡面的名稱。
                        $conf["R::createFixedVectorVar"]["vectorName"]="rhsCondition";
                        #$conf["R::createFixedVectorVar"]["vectorData"],陣列變數,要產生的向量變數資料。
                        $conf["R::createFixedVectorVar"]["vectorData"]=$combineToNewArray["content"];
                        #$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
                        $conf["R::createFixedVectorVar"]["writeTarget"]=&$dataToWrite;
                        $createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
                        unset($conf["R::createFixedVectorVar"]);
                        
                        #如果建立向量變數失敗
                        if($createFixedVectorVar["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置執行錯誤訊息
                                $result["error"]=$createFixedVectorVar;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        $dataToWrite[]="#使用 apriori 對data進行資料探堪 並將所有規則存在 rules";
                        $dataToWrite[]="#control = list(verbose=F)代表不顯示一些過程資訊";
                        $dataToWrite[]="#parameter = list(minlen=2)代表P(A)與P(B)不能爲空集合";
                        $dataToWrite[]="#appearance = list(rhs=c(\"Survived=No\", \"Survived=Yes\"),default=\"lhs\")代表結果變數Survived必須為\"No\"或 \"Yes\",原因變數不限定.";
                        $dataToWrite[]="rules<-apriori(data,control = list(verbose=F),".$parameter.",appearance=list(rhs=rhsCondition,default=\"lhs\"))";
                                                                
                        }#if end
                
                #反之沒有指定
                else{
                        
                        $dataToWrite[]="#使用 apriori 對data進行資料探堪 並將所有規則存在 rules";
                        $dataToWrite[]="#control = list(verbose=F)代表不顯示一些過程資訊";
                        $dataToWrite[]="#parameter = list(minlen=2)代表P(A)與P(B)不能爲空集合";
                        $dataToWrite[]="rules<-apriori(data,control = list(verbose=F),".$parameter.")";
                                        
                        }#else end
                
                $dataToWrite[]="";
                $dataToWrite[]="#檢示總共找到幾條規則rules";
                $dataToWrite[]="rules";
                $dataToWrite[]="";
                $dataToWrite[]="#設定規則的 support confidence lift 比例到小數點後三位就好";
                $dataToWrite[]="quality(rules)<-round(quality(rules),digits=3)";
                $dataToWrite[]="";
                $dataToWrite[]="#排序規則的順序,用lift來排,預設爲遞減排序。";
                $dataToWrite[]="rules.sorted<-sort(rules,by=\"lift\")";
                $dataToWrite[]="";
                $dataToWrite[]="#檢示所有規則的資料";
                $dataToWrite[]="inspect(rules.sorted)";
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                if(!isset($_SESSION))
                {                                       
                        $conf["R.writeRfile"]["addAndName"]=".R/".$_SERVER["USER"]."-apriori.R";#R檔案的位置與名稱
                }
                else if(isset($_SESSION["username"]))
                {
                        $conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-apriori.R";#R檔案的位置與名稱
                }
                else
                {
                        #取得系統時間
                        $unixTime=time::getMicrotime();
                        
                        $conf["R.writeRfile"]["addAndName"]=".R/".$unixTime."-apriori.R";#R檔案的位置與名稱
                }
                $conf["R.writeRfile"]["textToWrite"]=$dataToWrite;#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $writeRfileResult=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #移除暫存的R腳本內容變數
                unset($dataToWrite);
                
                #如果 R 腳本寫入失敗
                if($writeRfileResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$writeRfileResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得R腳本的位置
                $rScriptAdd=$writeRfileResult["newCreatedRfilePathAndName"];
                
                #執行R腳本
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["R.executeR"]["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$rScriptAdd;
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["R.executeR"]["disbaleOptimal"]="true";
                $executeResult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行R腳本出錯
                if($executeResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$executeResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #取得執行R後的輸出
                $result["oriOutPut"]=$executeResult;
                
                #初始化記錄規則的陣列變數
                $rulesArray=array();
                
                #初始化儲存規則計數的數字
                $rulesNum=0;
                
                #初始化暫存lhs條件的陣列變數
                $lhsNameArrays=array();
                $lhsValueArrays=array();
                        
                #初始化分析資料的列是從第幾列開始
                $rulesLineStart=28;     
                        
                #如果有指定預測結果的變數與其數值內容
                if(isset($conf["forecastVarName"]) && isset($conf["forecastVarValueArray"])){
                        
                        #設置分析資料的列是從第31列開始
                        $rulesLineStart=$rulesLineStart+$createFixedVectorVar["lineCount"]+1;
                                                        
                        }#if end                                
                                                        
                #依據每行的輸出結果
                for($i=$rulesLineStart;$i<$executeResult["lineCount"]-1;$i++){
                                
                        #如果分析資料的開始列為 "NULL"
                        if($executeResult["lineArray"][$rulesLineStart]=="NULL"){
                                
                                #設置執行正常
                                $result["status"]="true";
                                
                                #取得規則內容
                                $result["content"]["rulesArray"]=array();
                                
                                #設置規則筆數
                                $result["content"]["rulesCount"]=0;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end        
                                        
                        #用空格區分,看第一個是否為關聯規則的筆數.
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["function"],當前執行的函數名稱.
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess::spiltString"]["stringIn"]=$executeResult["lineArray"][$i];#要處理的字串。
                        $conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                        #備註:
                        #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                        unset($conf["stringProcess::spiltString"]);     
                                                
                        #如果分割字串失敗
                        if($spiltString["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$spiltString;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end                        
                                                
                        #如果分割好的第一段是 ($rulesNum+1) 則代表新的規則開始
                        if($spiltString["dataArray"][0]==$rulesNum+1){
                                        
                                #規則加1
                                $rulesNum++;
                        
                                }#if end
                                                
                        #如果有讀到 「=>」 則代表是當前規則的結束
                        #函式說明:
                        #檢查字串裡面有無指定的關鍵字
                        #回傳的結果:
                        #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                        #$result["error"],錯誤訊息
                        #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                        #$result["keyWordCount"],找到的關鍵字數量.
                        #必填的參數:
                        $conf["search.findKeyWord"]["keyWord"]="=>";#想要搜尋的關鍵字
                        $conf["search.findKeyWord"]["string"]=$executeResult["lineArray"][$i];#要被搜尋的字串內容
                        #可省略的參數:
                        #$conf["search.findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                        $searchResult=search::findKeyWord($conf["search.findKeyWord"]);
                        unset($conf["search.findKeyWord"]);     
                                                
                        #如果 $searchResult["status"] 等於 "false"
                        if($searchResult["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$searchResult;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end        
                                                                        
                        #如果有找到關鍵字
                        if($searchResult["founded"]=="true"){
                                
                                #解析原因與導致的結果字串
                                                                
                                #涵式說明:
                                #將固定格式的字串分開,並回傳分開的結果。
                                #回傳的參數:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["error"],錯誤訊息陣列
                                #$result["oriStr"],要分割的原始字串內容
                                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                #$result["dataCounts"],爲總共分成幾段
                                #必填的參數:
                                $conf["stringProcess.spiltString"]["stringIn"]=$executeResult["lineArray"][$i];#要處理的字串。
                                $conf["stringProcess.spiltString"]["spiltSymbol"]="=>";#爲以哪個符號作爲分割
                                $rulesStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                                unset($conf["stringProcess.spiltString"]);
                                
                                #如果處理結果字串出錯
                                if($rulesStr["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$rulesStr;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #取得原因字串     
                                $factorStr=$rulesStr["dataArray"][0];
                                
                                #取得結果字串
                                $resultStr=$rulesStr["dataArray"][1];
                                
                                #解析原因字串的變數名稱與其數值
                                #涵式說明:
                                #將固定格式的字串分開,並回傳分開的結果。
                                #回傳的參數:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["error"],錯誤訊息陣列
                                #$result["oriStr"],要分割的原始字串內容
                                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                #$result["dataCounts"],爲總共分成幾段
                                #必填的參數:
                                $conf["stringProcess.spiltString"]["stringIn"]=$factorStr;#要處理的字串。
                                $conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
                                $factorStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                                unset($conf["stringProcess.spiltString"]);
                                
                                #如果處理結果字串出錯
                                if($factorStr["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$factorStr;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                        
                                #剔除原因字串中不需要的字
                                #涵式說明:
                                #處理多個字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                                #$result["error"],錯誤訊息
                                #$result["processedStrArray"],處理好的字串陣列
                                #必填的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["stringIn"]=array($factorStr["dataArray"][0],$factorStr["dataArray"][1]);#爲要處理的字串陣列
                                #可省略的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["selectedCharacter"]=array($rulesNum,"{","}",".",",",";"," ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                #$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $factorStr=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
                                unset($conf["stringProcess::correctMutiStrCharacter"]);
                                
                                #如果處理結果字串出錯
                                if($factorStr["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$factorStr;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #取得導致的原因
                                $rulesArray[$rulesNum]["lhsName"][]=$factorStr["processedStrArray"][0];
                                $rulesArray[$rulesNum]["lhsValue"][]=$factorStr["processedStrArray"][1];
                                        
                                #解析結果字串的變數名稱與其數值                          
                                #涵式說明:
                                #將固定格式的字串分開,並回傳分開的結果。
                                #回傳的參數:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["error"],錯誤訊息陣列
                                #$result["oriStr"],要分割的原始字串內容
                                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                #$result["dataCounts"],爲總共分成幾段
                                #必填的參數:
                                $conf["stringProcess.spiltString"]["stringIn"]=$resultStr;#要處理的字串。
                                $conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
                                $resultStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                                unset($conf["stringProcess.spiltString"]);
                                
                                #如果處理結果字串出錯
                                if($resultStr["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$resultStr;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #涵式說明:
                                #處理多個字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                                #$result["error"],錯誤訊息
                                #$result["processedStrArray"],處理好的字串陣列
                                #必填的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["stringIn"]=array($resultStr["dataArray"][0]);#爲要處理的字串陣列
                                #可省略的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["selectedCharacter"]=array("{","}",";"," ",".");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                #$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $resultName=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
                                unset($conf["stringProcess::correctMutiStrCharacter"]);
                                
                                #如果處理結果字串出錯
                                if($resultName["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$resultName;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #取得導致的結果名稱
                                $rulesArray[$rulesNum]["rhsName"][]=$resultName["processedStrArray"][0];
                                
                                #取得導致的結果名稱對應的內容與其相關數值
                                $resultValueAndOthers=$resultStr["dataArray"][1];
                                
                                #解析導致的結果名稱對應的內容與其相關數值
                                #涵式說明:
                                #處理多個字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                                #$result["error"],錯誤訊息
                                #$result["processedStrArray"],處理好的字串陣列
                                #必填的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["stringIn"]=array($resultValueAndOthers);#爲要處理的字串陣列
                                #可省略的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["selectedCharacter"]=array("{","}",";");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                #$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $resultValueAndOthers=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
                                unset($conf["stringProcess::correctMutiStrCharacter"]);
                                
                                #如果處理結果字串出錯
                                if($resultValueAndOthers["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$resultValueAndOthers;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                                                        
                                #涵式說明:
                                #將固定格式的字串分開,並回傳分開的結果。
                                #回傳的參數:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["error"],錯誤訊息陣列
                                #$result["oriStr"],要分割的原始字串內容
                                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                #$result["dataCounts"],爲總共分成幾段
                                #必填的參數:
                                $conf["stringProcess.spiltString"]["stringIn"]=$resultValueAndOthers["processedStrArray"][0];#要處理的字串。
                                $conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                                $resultValue=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                                unset($conf["stringProcess.spiltString"]);
                                
                                #如果處理結果字串出錯
                                if($resultValue["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$resultValue;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #取得導致的結果名稱對應的數值
                                $rulesArray[$rulesNum]["rhsValue"][]=$resultValue["dataArray"][0];
                                                        
                                #取得導致結果名稱對應數值的 support
                                $rulesArray[$rulesNum]["support"][]=$resultValue["dataArray"][1];
                                
                                #取得導致結果名稱對應數值的 confidence
                                $rulesArray[$rulesNum]["confidence"][]=$resultValue["dataArray"][2];
                                
                                #取得導致結果名稱對應數值的 lift
                                $rulesArray[$rulesNum]["lift"][]=$resultValue["dataArray"][3];
                                                                        
                                }#if end
                                
                        #反之沒有找到關鍵字
                        else{
                                
                                #取得該行結果
                                $thisLine=$executeResult["lineArray"][$i];
                                
                                #涵式說明:
                                #處理多個字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                                #$result["function"],當前執行的函數.
                                #$result["error"],錯誤訊息
                                #$result["processedStrArray"],處理好的字串陣列
                                #必填的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["stringIn"]=array($thisLine);#爲要處理的字串陣列
                                #可省略的參數:
                                $conf["stringProcess::correctMutiStrCharacter"]["selectedCharacter"]=array(" ","{","}",";",".",","," ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                #$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $thisLine=stringProcess::correctMutiStrCharacter($conf["stringProcess::correctMutiStrCharacter"]);
                                unset($conf["stringProcess::correctMutiStrCharacter"]);
                                
                                #如果處理結果字串出錯
                                if($thisLine["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$thisLine;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                        
                                #涵式說明:
                                #將固定格式的字串分開,並回傳分開的結果。
                                #回傳的參數:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["error"],錯誤訊息陣列
                                #$result["function"],當前執行的函數名稱.
                                #$result["oriStr"],要分割的原始字串內容
                                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                #$result["dataCounts"],爲總共分成幾段
                                #必填的參數:
                                $conf["stringProcess.spiltString"]["stringIn"]=$thisLine["processedStrArray"][0];#要處理的字串。
                                $conf["stringProcess.spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
                                $conditionStr=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                                unset($conf["stringProcess.spiltString"]);
                                
                                #如果處理結果字串出錯
                                if($conditionStr["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$conditionStr;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                        
                                #將導致的原因變數名稱前的規則號碼剔除
                                #涵式說明:
                                #處理字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["function"],當前執行的函數.
                                #$result["content"],爲處理好的字串.
                                #$result["error"],錯誤訊息陣列.
                                #必填的參數:
                                $conf["stringProcess::correctCharacter"]["stringIn"]=$conditionStr["dataArray"][0];#爲要處理的字串
                                #可省略的參數:
                                $conf["stringProcess::correctCharacter"]["selectedCharacter"]=array($rulesNum);#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                #$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
                                unset($conf["stringProcess::correctCharacter"]);
                                                                
                                #如果修正出錯
                                if($correctCharacter["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$correctCharacter;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end        
                                                                                
                                #取得處理好的導致的原因變數名稱
                                $rulesArray[$rulesNum]["lhsName"][]=$correctCharacter["content"];
                                
                                #如果 $conditionStr["dataArray"][1] 不存在
                                if(!isset($conditionStr["dataArray"][1])){
                                        
                                        #設爲 ""
                                        $conditionStr["dataArray"][1]="";
                                        
                                        }#if end
                                
                                #取得導致的原因變數名稱其值爲何
                                $rulesArray[$rulesNum]["lhsValue"][]=$conditionStr["dataArray"][1];
                                
                                }#else end
                        
                        }#for end
                
                #取得規則內容
                $result["content"]["rulesArray"]=$rulesArray;
                                        
                #取得規則的數量
                $result["content"]["rulesCount"]=count($rulesArray);            
                                                
                #設置執行正常      
                $result["status"]="true";
                
                #回傳結果
                return $result;
                                        
                }#funciton apriori end
        
        /*
        #函式說明:
        #繪製樣本中其中兩個題項填寫狀況的交叉表
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["RscriptContent"],執行的R腳本內容
        #$result["content"],交叉表的資料
        #$result["content"]["xLabelTypeName"],欄項目的類型名稱
        #$result["content"]["yLabelTypeName"],列項目的類型名稱 
        #$result["content"]["xLabelName"],欄項目名稱陣列
        #$result["content"]["yLabelName"],列項目名稱陣列
        #$result["content"][$i]["xLabelName"],交叉表從上致下,從左至右第$i+1個數值的x軸項目名稱.
        #$result["content"][$i]["yLabelName"],交叉表從上致下,從左至右第$i+1個數值的y軸項目名稱.
        #$result["content"][$i]["value"],交叉表從上致下,從左至右第$i+1個數值.
        #$result["content"]["htmlAddress"],交叉表html檔案的位址與檔案名稱. 
        #必填參數:
        #$conf["dnnStr"],字串陣列,每個資料集的名稱
        $conf["dnnStr"]=array("","","");
        #$conf["dataArrayA"],字串陣列,要繪製交叉表的資料A,元素數量必須跟$conf["dataArrayB"]一樣。
        $conf["dataArrayA"]=array();
        #$conf["dataArrayB"],字串陣列,要繪製交叉表的資料B,元素數量必須跟$conf["dataArrayA"]一樣。
        $conf["dataArrayB"]=array();
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["dataArrayC"],字串陣列,要繪製交叉表的資料C(有幾種資料就會產生幾張交叉表)
        #$conf["dataArrayC"]=array();
        #$conf["crossTableAddress"],字串,產生好的crossTable網頁檔要存在哪裡,名稱為何,副檔名(.html)會自動補上,不設定的話,就不會產生html檔.
        #$conf["crossTableAddress"]="";
        #參考資料:
        #無.
        #備註:
        #無
        */
        public static function table(&$conf){
        
                #初始化要回傳的結果
                $result=array();
                
                #如果 $conf 不等於 "array"
                if(gettype($conf)!="array"){                            
                        
                        #設定錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]="參數的Key指定有誤!";
                        
                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $_SESSION["username"] 不存在
                if(!isset($_SESSION["username"])){
                        
                        #設為"NULL"
                        $_SESSION["username"]="NULL";
                        
                        }#if end
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                #$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck.checkArguments"]["varInput"]=&$conf;
                #$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dnnStr","dataArrayA","dataArrayB");
                #$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","array");
                #$conf["variableCheck.checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
                #可以省略的參數:
                #$conf["variableCheck.checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
                $conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
                #$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck.checkArguments"]["skipableVariableName"]=array("dataArrayC","crossTableAddress");
                #$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","string");
                #$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                $conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,".R/table-".$_SESSION["username"].".html");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                $conf["variableCheck.checkArguments"]["arrayCountEqualCheck"][]=array("dataArrayA","dataArrayB","dataArrayC");
                $checkArgumentsResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
                unset($conf["variableCheck.checkArguments"]);
                
                #如果檢查參數失敗
                if($checkArgumentsResult["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArgumentsResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果參數檢查不通過
                if($checkArgumentsResult["passed"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArgumentsResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #初始化儲存資料集C的字串變數
                $dataArrayC="";
                                                                                                                        
                #產生用於產生交叉表的R語法
                
                #初始化儲存資料集名稱的變數
                $dnnStr="c(";
                
                #如果 $dataArrayC 等於 ""
                if($dataArrayC==""){
                        
                        #串接兩個資料集名稱
                        $dnnStr=$dnnStr."\"".$conf["dnnStr"][0]."\","."\"".$conf["dnnStr"][1]."\")";
                        
                        #產生用於產生交叉表的R語法
                        $table="table(dataA,dataB,dnn=dnnStr)";
                        
                        }#if end
                        
                #反之
                else{
                        
                        #串接三個資料集名稱
                        $dnnStr=$dnnStr."\"".$conf["dnnStr"][0]."\","."\"".$conf["dnnStr"][1]."\""."\","."\"".$conf["dnnStr"][2]."\")";
                        
                        $table="table(dataA,dataB,dataC,dnn=dnnStr)";
                        
                        }#else end
                        
                #取得欄項目的類型名稱
                $result["content"]["xLabelTypeName"]=$conf["dnnStr"][1];
                
                #取得列項目的類型名稱 
                $result["content"]["yLabelTypeName"]=$conf["dnnStr"][0];
                                                                                        
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R.writeRfile"]["addAndName"]=".R/table-".$_SESSION["username"].".R";#R檔案的位置與名稱
                #要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                $conf["R.writeRfile"]["textToWrite"][]="#產生交叉表的R腳本";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#資料集描述";
                $conf["R.writeRfile"]["textToWrite"][]="dnnStr=".$dnnStr;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#資料集A(會稱呈現在Y軸)";
                
                #建立資料集A
                #涵式說明:
                #避免超出4096bytes限制的條件下產生向量變數語法
                #請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
                #回傳結果:
                #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
                #$result["error"],錯誤訊息陣列
                #$result["function"],當前函數名稱
                #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
                #必填參數:
                #$conf["R::createFixedVectorVar"]["vectorName"],字串,向量變數在R裡面的名稱。
                $conf["R::createFixedVectorVar"]["vectorName"]="dataA";
                #$conf["R::createFixedVectorVar"]["vectorData"],陣列變數,要產生的向量變數資料。
                $conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayA"];
                #$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
                $conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
                $createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
                unset($conf["R::createFixedVectorVar"]);
                
                #如果新增建立R向量變數失敗
                if($createFixedVectorVar["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$createFixedVectorVar;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#資料集B(會稱呈現在X軸)";
                
                #建立資料集B
                #涵式說明:
                #避免超出4096bytes限制的條件下產生向量變數語法
                #請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
                #回傳結果:
                #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
                #$result["error"],錯誤訊息陣列
                #$result["function"],當前函數名稱
                #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
                #必填參數:
                #$conf["R::createFixedVectorVar"]["vectorName"],字串,向量變數在R裡面的名稱。
                $conf["R::createFixedVectorVar"]["vectorName"]="dataB";
                #$conf["R::createFixedVectorVar"]["vectorData"],陣列變數,要產生的向量變數資料。
                $conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayB"];
                #$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
                $conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
                $createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
                unset($conf["R::createFixedVectorVar"]);
                
                #如果新增建立R向量變數失敗
                if($createFixedVectorVar["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$createFixedVectorVar;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#第三個資料集,有幾種資料就會繪製幾個交叉表";
                
                #如果 $conf["dataArrayC"] 存在
                if(isset($conf["dataArrayC"])){
                
                        #如果 $conf["dataArrayC"] 不為 ""
                        if($conf["dataArrayC"]!=""){
                                        
                                #建立資料集C
                                #涵式說明:
                                #避免超出4096bytes限制的條件下產生向量變數語法
                                #請勿使用 __vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
                                #回傳結果:
                                #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
                                #$result["error"],錯誤訊息陣列
                                #$result["function"],當前函數名稱
                                #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
                                #必填參數:
                                #$conf["R::createFixedVectorVar"]["vectorName"],字串,向量變數在R裡面的名稱。
                                $conf["R::createFixedVectorVar"]["vectorName"]="dataC";
                                #$conf["R::createFixedVectorVar"]["vectorData"],陣列變數,要產生的向量變數資料。
                                $conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayC"];
                                #$conf["R::createFixedVectorVar"]["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
                                $conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R.writeRfile"]["textToWrite"];
                                $createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
                                unset($conf["R::createFixedVectorVar"]);        
                                                
                                #如果新增建立R向量變數失敗
                                if($createFixedVectorVar["status"]=="false"){
                                        
                                        #設置執行失敗
                                        $result["status"]="false";
                                        
                                        #設置執行錯誤
                                        $result["error"]=$createFixedVectorVar;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end                
                                                                                                                
                                }#if end
                        
                        }#if end
                                
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#產生交叉表";
                $conf["R.writeRfile"]["textToWrite"][]="data.table=".$table;
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#輸出列的項目名稱";
                $conf["R.writeRfile"]["textToWrite"][]="cat(rownames(data.table),file=\".R/table-".$_SESSION["username"]."-R-CatOutput\",append=FALSE)";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#輸出換行符號附加到 .R/table-".$_SESSION["username"]."-R-CatOutput";
                $conf["R.writeRfile"]["textToWrite"][]="cat(\"\r\n\",file=\".R/table-".$_SESSION["username"]."-R-CatOutput\",append=TRUE)";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#印出欄的項目名稱";
                $conf["R.writeRfile"]["textToWrite"][]="cat(colnames(data.table),file=\".R/table-".$_SESSION["username"]."-R-CatOutput\",append=TRUE)";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#輸出換行符號附加到 .R/table-".$_SESSION["username"]."-R-CatOutput";
                $conf["R.writeRfile"]["textToWrite"][]="cat(\"\r\n\",file=\".R/table-".$_SESSION["username"]."-R-CatOutput\",append=TRUE)";
                $conf["R.writeRfile"]["textToWrite"][]="";
                $conf["R.writeRfile"]["textToWrite"][]="#印出交叉表";
                $conf["R.writeRfile"]["textToWrite"][]="cat(data.table,file=\".R/table-".$_SESSION["username"]."-R-CatOutput\",append=TRUE)";
                $conf["R.writeRfile"]["textToWrite"][]="";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.writeRfile"]["fileArgu"]=$conf["fileArgu"];
                $writeRfile=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #如果R腳本檔建立失敗
                if($writeRfile["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$writeRfile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                                                
                #執行R腳本檔
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #$result["RscriptContent"],執行的R腳本內容.
                #必填的參數:
                #$conf["R.executeR"]["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$writeRfile["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R.executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["R.executeR"]["disbaleOptimal"]="true";
                $executeRresult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行R腳本失敗
                if($executeRresult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$executeRresult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查 ".R/table-".$_SESSION["username"]."-R-CatOutput" 是否存在
                #涵式說明:檢查多個檔案與資料夾是否存在.
                #回傳的結果:
                #$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
                #$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
                #必填的參數:
                $conf["fileAccess.checkMultiFileExist"]["fileArray"]=array(".R/table-".$_SESSION["username"]."-R-CatOutput");#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
                #參考資料來源:
                #http://php.net/manual/en/function.file-exists.php
                #http://php.net/manual/en/control-structures.foreach.php
                $checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
                unset($conf["fileAccess.checkMultiFileExist"]);
                
                #如果 ".R/table-".$_SESSION["username"]."-R-CatOutput" 不存在
                if($checkMultiFileExist["varExist"][0]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkMultiFileExist;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #讀取 ".R/table-".$_SESSION["username"]."-R-CatOutput" 檔案的內容以便存取列與欄的項目名稱. 
                #函式說明:
                #依據行號分隔抓取檔案的內容,結果會回傳一個陣列
                #回傳的變數說明:
                #$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
                #$result["error"],錯誤訊息提示
                #$result["fileContent"],爲檔案的內容陣列
                #$result["lineCount"],爲檔案內容總共的行數
                #$result["fullContent"],為檔案的完整內容
                #必填的參數:
                $conf["fileAccess.getFileContent"]["filePositionAndName"]=".R/table-".$_SESSION["username"]."-R-CatOutput";#爲檔案的位置以及名稱
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess.getFileContent"]["fileArgu"]=$conf["fileArgu"];
                #參考資料:
                #file():取得檔案內容的行數
                #http:#php.net/manual/en/function.file.php
                #rtrim():剔除透過file()取得每行內容結尾的換行符號.
                $getFileContent=fileAccess::getFileContent($conf["fileAccess.getFileContent"]);
                unset($conf["fileAccess.getFileContent"]);
                
                #如果 讀取檔案 ".R/table-".$_SESSION["username"]."-R-CatOutput" 失敗
                if($getFileContent["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$getFileContent;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得列項目名稱
                $rowStr=$getFileContent["fileContent"][0];
                
                #解析列項目名稱
                #涵式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳的參數:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #必填的參數:
                $conf["stringProcess.spiltString"]["stringIn"]=$rowStr;#要處理的字串。
                $conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                #備註:
                #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                $spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]); 
                unset($conf["stringProcess.spiltString"]);
                
                #如果解析列項目字串失敗
                if($spiltString["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$spiltString;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #取得解析好的列項目陣列      
                $result["content"]["yLabelName"]=$spiltString["dataArray"];
                                        
                #取得欄項目名稱
                $colStr=$getFileContent["fileContent"][1];
                
                #解析欄項目名稱
                #涵式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳的參數:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #必填的參數:
                $conf["stringProcess.spiltString"]["stringIn"]=$colStr;#要處理的字串。
                $conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                #備註:
                #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                $spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]); 
                unset($conf["stringProcess.spiltString"]);
                
                #如果解析列項目字串失敗
                if($spiltString["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$spiltString;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得解析好的行項目陣列      
                $result["content"]["xLabelName"]=$spiltString["dataArray"];
                
                #解析交叉表的結果(要回傳)
                
                #檢示分析好的資料
                #var_dump($getFileContent);
                
                #取得交叉分析的資料
                #$getFileContent["fileContent"][2];
                
                #切割 $executeRresult["lineArray"][$i] 字串
                #涵式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳的參數:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #必填的參數:
                $conf["stringProcess.spiltString"]["stringIn"]=$getFileContent["fileContent"][2];#要處理的字串。
                $conf["stringProcess.spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                #備註:
                #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                $spiltString=stringProcess::spiltString($conf["stringProcess.spiltString"]); 
                unset($conf["stringProcess.spiltString"]);
                
                #如果解析列項目字串失敗
                if($spiltString["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$spiltString;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #有幾個交叉表的元素就執行幾次迴圈
                for($j=0;$j<$spiltString["dataCounts"];$j++){
                
                        (int)$xLabelNameKey=($j+1)/count($result["content"]["yLabelName"])-1;
                        (int)$yLabelNameKey=($j+1)/count($result["content"]["xLabelName"])-1;
                
                        #$result["content"][$i]["xLabelName"],交叉表從上致下,從左至右第$i+1個數值的x軸項目名稱.
                        #$result["content"][$i]["yLabelName"],交叉表從上致下,從左至右第$i+1個數值的y軸項目名稱.
                        #$result["content"][$i]["value"],交叉表從上致下,從左至右第$i+1個數值.
                        
                        #建立暫存的數值資訊陣列
                        #參考資料來源:
                        #http://php.net/manual/en/function.array-combine.php
                        $keys=array("xLabelName","yLabelName","value");
                        $values=array($result["content"]["xLabelName"][$xLabelNameKey],$result["content"]["yLabelName"][$yLabelNameKey],$spiltString["dataArray"][$j]);
                        $tempArray=array_combine($keys,$values);
                        
                        #取得特定數值的資訊
                        $result["content"][]=$tempArray;
                
                        #debug
                        #echo "<p>Entered!</p>";
                
                        }#for end
                                                                
                #移除 ".R/table-".$_SESSION["username"]."-R-CatOutput" 檔案
                #涵式說明:
                #移除檔案
                #回傳的結果:
                #$result["status"],"true"代表移除成功,"false"代表移除失敗.
                #$result["error"],錯誤訊息陣列
                #$result["warning"],警告訊息陣列
                #$result["function"],當前執行的函數名稱
                #必填的參數:
                $conf["=fileAccess.delFile"]["fileAddress"]=".R/table-".$_SESSION["username"]."-R-CatOutput";#要移除檔案的位置
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["=fileAccess.delFile"]["fileArgu"]=$conf["fileArgu"];
                $delFile=fileAccess::delFile($conf["=fileAccess.delFile"]);
                unset($conf["=fileAccess.delFile"]);
                
                #如果移除檔案失敗
                if($delFile["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$delFile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #取得執行的R腳本內容
                $result["RscriptContent"]=$executeRresult["RscriptContent"];
                                                                
                #如果 $conf["crossTableAddress"] 有設定
                if(isset($conf["crossTableAddress"])){
                
                        #如果 $conf["crossTableAddress"] 不為 ""
                        if($conf["crossTableAddress"]!=""){
                                
                                $conf["crossTableAddress"]=$conf["crossTableAddress"].".html";
                                
                                #建立顯示交叉表結果的html檔案
                                #函式說明:
                                #檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
                                #回傳的結果:
                                #$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
                                #$result["error"],錯誤訊息陣列.
                                #$result["createdFileName"],建立好的檔案名稱.
                                #$result["createdFilePath"],檔案建立的路徑.
                                #$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
                                #必填的參數:
                                #$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
                                $conf["fileAccess"]["createFileAfterCheck"]["checkedFileAndPath"]=$conf["crossTableAddress"];
                                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                                $conf["fileAccess"]["createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
                                $createHtmlFile=fileAccess::createFileAfterCheck($conf["fileAccess"]["createFileAfterCheck"]);
                                unset($conf["fileAccess"]["createFileAfterCheck"]);
                        
                                #如果建立顯示交叉表結果的html檔案失敗
                                if($createHtmlFile["status"]=="false"){
                                        
                                        #設置執行不正常的識別
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["status"]=$createHtmlFile;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #初始化表格的內容語法
                                $tableContent="<table border = 1px>";
                                
                                #第一列開始
                                $tableContent=$tableContent."<tr>";
                                
                                #第一列第一個元素
                                $tableContent=$tableContent."<td>".$result["content"]["yLabelTypeName"]."\\".$result["content"]["xLabelTypeName"]."</td>";
                                
                                #第一列後面其他的元素
                                
                                #有幾個 $result["content"]["xLabelName"] 就執行幾次
                                for($i=0;$i<count($result["content"]["xLabelName"]);$i++){
                                        
                                        $tableContent=$tableContent."<td>".$result["content"]["xLabelName"][$i]."</td>";
                                        
                                        }#for end
                                
                                #第一列結束
                                $tableContent=$tableContent."</tr>";
                                
                                #有幾個 $result["content"]["yLabelName"] 就執行幾次
                                for($i=0;$i<count($result["content"]["yLabelName"]);$i++){
                                        
                                        #第$i+1列開始
                                        $tableContent=$tableContent."<tr>";
                                        
                                        #第$i+1列的名稱
                                        $tableContent=$tableContent."<td>".$result["content"]["yLabelName"][$i]."</td>";
                                        
                                        #有幾個 $result["content"]["xLabelName"] 就執行幾次
                                        for($j=0;$j<count($result["content"]["xLabelName"]);$j++){
                                                
                                                #第$i+1列 第$j+1欄的 數值內容
                                                $tableContent=$tableContent."<td>".$result["content"][($i*count($result["content"]["xLabelTypeName"])+$j)]["value"]."</td>";
                                                
                                                }#for end
                                                
                                        #第$i+1列結束
                                        $tableContent=$tableContent."</tr>";    
                                        
                                        }#for end
                                
                                #表格語法的結束
                                $tableContent=$tableContent."</table>";
                                
                                #寫入產生交叉表的html語法
                                #涵式說明:
                                #將多行字串寫入到檔案
                                #回傳的結果:
                                #$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
                                #$result["error"],錯誤訊息陣列.
                                #必填的參數:
                                #$conf["fileAccess.writeMultiLine"]["fileName"],字串,爲要編輯的檔案名稱
                                $conf["fileAccess.writeMultiLine"]["fileName"]=$createHtmlFile["createdFilePathAndName"];
                                #$conf["fileAccess.writeMultiLine"]["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容
                                        #$conf["fileAccess.writeMultiLine"]["inputString"][$i] 代表第 $i+1 行。
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="<html>";
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="<head>";
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="</head>";
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="<body>";
                                $conf["fileAccess.writeMultiLine"]["inputString"][]=$tableContent;
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="</body>";
                                $conf["fileAccess.writeMultiLine"]["inputString"][]="</html>";
                                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                                $conf["fileAccess.writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
                                #可省略的參數:
                                #$conf["fileAccess.writeMultiLine"]["inputString"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                                $writeHtmlData=fileAccess::writeMultiLine($conf["fileAccess.writeMultiLine"]);
                                unset($conf["fileAccess.writeMultiLine"]);                                                                                                              
                                
                                #如果 寫入html 語法失敗
                                if($writeHtmlData["status"]=="false"){
                                        
                                        #設置執行不正常的識別
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["status"]=$writeHtmlData;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                }#if end
                
                        }#if end
                
                #如果有設定交叉表網頁檔的保存位置
                if(isset($conf["crossTableAddress"])){
                        
                        #取得網頁檔案位置       
                        $result["content"]["htmlAddress"]=$conf["crossTableAddress"];
                        
                        }#if end
                                        
                #設置執行正常
                $result["status"]="true";
        
                #回傳結果
                return $result;
        
                }#function table end
                
        /*
        #函式說明:
        #交叉分析,分析兩變數的關係,將結果輸出到html檔案裡面,其中若樣本數大於30則用卡方檢定,若樣本數小於30則用費雪精確獨立性檢定。
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["content"],分析結果 
        #$result["content"]["htmlReport"],報表網頁檔的位置
        #$result["content"]["pairedDataCount"],觀察值的筆數
        #$result["content"]["varAtype"],變數一的類別陣列
        #$result["content"]["varBtype"],變數二的類別陣列
        #$result["content"]["array"]["變數一類別之一"]["變數二類別之一"]["count"],變數一與變數二交叉位置的頻率
        #$result["content"]["array"]["變數一類別之一"]["變數二類別之一"]["radio"],變數一與變數二交叉位置的比例
        #$result["content"]["chi2"],卡方值,若不適用則為"null".
        #$result["content"]["df"],自由度,若不適用則為"null"
        #$result["content"]["chi2pValue"],p值,若不適用則為"null"
        #$result["content"]["fisherTestVarRelationship"],取得費雪檢定的兩變數關係,若不適用則為"null"  
        #$result["content"]["fisherTestPvalue"],取得費雪檢定的p值,若不適用則為"null"
        #$result["content"]["rCode"],執行的R程式內容.
        #$result["content"]["rCodeFile"],#儲存輸出的R程式檔案位置與名稱.
        #$result["content"]["rawOutput"],R原始的分析結果輸出.
        #必填參數:
        #$conf["dnnStr"],字串陣列,每個資料集的名稱
        $conf["dnnStr"]=array("","");
        #$conf["dataArrayA"],字串陣列,要繪製交叉表的資料A,元素數量必須跟$conf["dataArrayB"]一樣。
        $conf["dataArrayA"]=array();
        #$conf["dataArrayB"],字串陣列,要繪製交叉表的資料B,元素數量必須跟$conf["dataArrayA"]一樣。
        $conf["dataArrayB"]=array();
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["outRfile"],字串,輸出執行的R程式腳本其儲存位置與名稱,副檔名「.R」會自動加上,預設不輸出.
        #$conf["outRfile"]="";
        #$conf["crossTableAddress"],字串,產生好的交叉分析網頁檔要存在哪裡,名稱為何,副檔名(.html)會自動補上,預設的位置與名稱為".R/crossTable-".$_SESSION["username"]
        #$conf["crossTableAddress"]="";
        #$conf["title"],字串陣列,交叉表的標題,一個元素代表一列,預設為"交叉表"
        #$conf["title"]=array("交叉表");
        #參考資料來源:
        #http://www2.nsysu.edu.tw/politics/liu/teaching/dataAnalysis/lectureNotes/03_descriptiveStatistics.R
        #卡方獨立性(或稱齊一性)檢定=>http://www.r-web.com.tw/stat/step1.php?method=chi2_test_ind_hom
        #費雪精確檢定=>http://www.r-web.com.tw/stat/step1.php?method=fisher_test
        #備註:
        #取得比例有時會失敗
        */
        public static function crossTable(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $_SESSION["username"] 不存在
                if(!isset($_SESSION["username"])){
                        
                        #設為"NULL"
                        $_SESSION["username"]="NULL";
                        
                        }#if end
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dnnStr","dataArrayA","dataArrayB");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","array");
                #$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
                #$conf["canBeEmptyString"]="false";
                #$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("crossTableAddress","title","outRfile");
                #$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                $conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".R/crossTable-".$_SESSION["username"],array("交叉表"),"null");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                $conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("dataArrayA","dataArrayB");
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果檢查失敗
                if($checkArguments["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #產生資料標題R語法字串
                $r_VarTitle="dnnStr=c(\"".$conf["dnnStr"][0]."\",\"".$conf["dnnStr"][1]."\")";
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R::writeRfile"]["addAndName"]=".R/crossTable-".$_SESSION["username"].".R";#R檔案的位置與名稱
                #$conf["R::writeRfile"]["textToWrite"]=array("");#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                $conf["R::writeRfile"]["textToWrite"][]="#匯入gmodels套件";
                $conf["R::writeRfile"]["textToWrite"][]="library(gmodels)";
                $conf["R::writeRfile"]["textToWrite"][]="";
                $conf["R::writeRfile"]["textToWrite"][]="#產生資料標題";
                $conf["R::writeRfile"]["textToWrite"][]=$r_VarTitle;
                $conf["R::writeRfile"]["textToWrite"][]="";
                
                #從 $conf["dataArrayA"] 產生R資料變數
                #涵式說明:
                #避免超出4096bytes限制的條件下產生向量變數語法
                #請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
                #回傳結果:
                #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
                #$result["error"],錯誤訊息陣列
                #$result["function"],當前函數名稱
                #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
                #必填參數:
                #$conf["vectorName"],字串,向量變數在R裡面的名稱。
                $conf["R::createFixedVectorVar"]["vectorName"]="var1";
                #$conf["vectorData"],陣列變數,要產生的向量變數資料。
                $conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayA"];
                #$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
                $conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R::writeRfile"]["textToWrite"];
                $createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
                unset($conf["R::createFixedVectorVar"]);
                
                #如果從 $conf["dataArrayA"] 產生R資料變數失敗
                if($createFixedVectorVar["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$createFixedVectorVar;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                $conf["R::writeRfile"]["textToWrite"][]="";
                
                #從 $conf["dataArrayB"] 產生R資料變數
                #涵式說明:
                #避免超出4096bytes限制的條件下產生向量變數語法
                #請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
                #回傳結果:
                #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
                #$result["error"],錯誤訊息陣列
                #$result["function"],當前函數名稱
                #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
                #必填參數:
                #$conf["vectorName"],字串,向量變數在R裡面的名稱。
                $conf["R::createFixedVectorVar"]["vectorName"]="var2";
                #$conf["vectorData"],陣列變數,要產生的向量變數資料。
                $conf["R::createFixedVectorVar"]["vectorData"]=$conf["dataArrayB"];
                #$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
                $conf["R::createFixedVectorVar"]["writeTarget"]=&$conf["R::writeRfile"]["textToWrite"];
                $createFixedVectorVar=R::createFixedVectorVar($conf["R::createFixedVectorVar"]);
                unset($conf["R::createFixedVectorVar"]);
                
                #如果從 $conf["dataArrayB"] 產生R資料變數失敗
                if($createFixedVectorVar["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$createFixedVectorVar;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                $conf["R::writeRfile"]["textToWrite"][]="";
                
                #放置交叉分析的語法
                $conf["R::writeRfile"]["textToWrite"][]="#交叉分析";
                
                #如果是小樣本(總樣本數30筆以下)
                if(count($conf["dataArrayA"])<30){
                        
                        $conf["R::writeRfile"]["textToWrite"][]="CrossTable(var1,var2,dnn=dnnStr,prop.t=FALSE,prop.c=FALSE,prop.chisq=FALSE,chisq=TRUE,fisher=TRUE)";
                        
                        }#if end
                        
                #反之是大樣本     
                else{
                        
                        $conf["R::writeRfile"]["textToWrite"][]="CrossTable(var1,var2,dnn=dnnStr,prop.t=FALSE,prop.c=FALSE,prop.chisq=FALSE,chisq=TRUE,fisher=FALSE)";
                        
                        }#if end
                                
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R::writeRfile"]["fileArgu"]=$conf["fileArgu"];   
                $writeRfile=R::writeRfile($conf["R::writeRfile"]);
                unset($conf["R::writeRfile"]);
                
                #如果建立R腳本檔案失敗
                if($writeRfile["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$writeRfile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #$result["RscriptContent"],執行的R腳本內容,一個元素代表一列.
                #必填的參數:
                #$conf["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R::executeR"]["rPositionAndName"]=$writeRfile["newCreatedRfilePathAndName"];
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["R::executeR"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["disbaleOptimal"]="true";
                $executeR=R::executeR($conf["R::executeR"]);
                unset($conf["R::executeR"]);
                
                #如果執行R腳本失敗
                if($executeR["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$executeR;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得交叉分析的原始結果
                $result["content"]["rawOutput"]=$executeR["lineArray"];
                
                #取得執行的R腳本內容
                $result["content"]["rCode"]=$executeR["RscriptContent"];
                
                #如果有設置 $conf["outRfile"]
                if($conf["outRfile"]){
                        
                        #將 $result["content"]["rCode"] 內容寫入到 R 檔案裡面
                        #涵式說明:
                        #將多行字串寫入到檔案
                        #回傳的結果:
                        #$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
                        #$result["error"],錯誤訊息陣列.
                        #必填的參數:
                        #$conf["fileName"],字串,爲要編輯的檔案名稱
                        $conf["fileAccess::writeMultiLine"]["fileName"]=$conf["outRfile"].".R";
                        #$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容
                                #$conf["inputString"][$i] 代表第 $i+1 行。
                        $conf["fileAccess::writeMultiLine"]["inputString"]=$result["content"]["rCode"];
                        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                        $conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
                        #可省略的參數:
                        #$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                        $outRfile=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
                        unset($conf["fileAccess::writeMultiLine"]);
                        
                        #如果輸出R腳本失敗
                        if($outRfile["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$outRfile;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #儲存輸出的R程式檔案位置與名稱
                        $result["content"]["rCodeFile"]=$conf["outRfile"].".R";
                        
                        }#if end
                
                #初始化儲存資料分析的起點列數
                $rowStartLine=0;
                
                #有幾列輸出就執行幾次迴圈
                for($i=0;$i<$executeR["lineCount"];$i++){
                        
                        #var_dump($executeR["lineArray"][$i]);
                        
                        #定位到有 "Total Observations in Table:" 的列
                        #函式說明:
                        #檢查字串裡面有無指定的關鍵字
                        #回傳的結果:
                        #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                        #$result["error"],錯誤訊息
                        #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                        #$result["keyWordCount"],找到的關鍵字數量.
                        #必填的參數:
                        $conf["search::findKeyWord"]["keyWord"]="Total Observations in Table:";#想要搜尋的關鍵字
                        $conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
                        #可省略的參數:
                        #$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                        $findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
                        unset($conf["search::findKeyWord"]);
                        
                        #如果搜尋關鍵字失敗
                        if($findKeyWord["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$findKeyWord;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #如果有找到關鍵字
                        if($findKeyWord["founded"]=="true"){
                                
                                #取得分析結果開始的列數
                                $rowStartLine=$i;
                                
                                #跳出迴圈
                                break;
                                
                                }#if end
                        
                        }#for end
                        
                #解析資料的筆數
                
                #涵式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳的參數:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #必填的參數:
                $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$rowStartLine];#要處理的字串。
                $conf["stringProcess::spiltString"]["spiltSymbol"]=":  ";#爲以哪個符號作爲分割
                #備註:
                #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                unset($conf["stringProcess::spiltString"]);
                
                #如果分割字串失敗
                if($spiltString["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                                
                        #設置錯誤訊息
                        $result["error"]=$spiltString;
                                
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得觀察值筆數
                $result["content"]["pairedDataCount"]=$spiltString["dataArray"][1];
                                                        
                #取得變數一($conf["dataArrayA"])的種類
                
                #初始化儲存變數一$conf["dataArrayA"])的種類
                $result["content"]["varAtype"]=array();
                
                #debug
                #var_dump($rowStartLine+6);
                #var_dump($executeR["lineCount"]);
                
                #執行迴圈直到遇到 "Column Total" 為止,一次加三
                for($i=$rowStartLine+6;$i<$executeR["lineCount"];$i=$i+3){
                        
                        #echo "<p>entered!</p>";
                        
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$i];#要處理的字串。
                        $conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
                        #備註:
                        #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                        unset($conf["stringProcess::spiltString"]);
                        
                        #如果分割字串失敗
                        if($spiltString["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$spiltString;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        #搜尋分割好的第一個字串是否有關鍵字 "Column Total"
                        #函式說明:
                        #檢查字串裡面有無指定的關鍵字
                        #回傳的結果:
                        #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                        #$result["error"],錯誤訊息
                        #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                        #$result["keyWordCount"],找到的關鍵字數量.
                        #必填的參數:
                        $conf["search::findKeyWord"]["keyWord"]="Column Total";#想要搜尋的關鍵字
                        $conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
                        #可省略的參數:
                        #$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                        $findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
                        unset($conf["search::findKeyWord"]);
                        
                        #如果尋找關鍵字失敗
                        if($findKeyWord["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$findKeyWord;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #如果有找到關鍵字 "Column Total"
                        if($findKeyWord["founded"]=="true"){
                                
                                #跳出迴圈
                                break;
                                
                                }#if end
                        
                        #剔除變數一類別字串的空白
                        #涵式說明:
                        #處理字串避免網頁出錯
                        #回傳的結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["function"],當前執行的函數.
                        #$result["content"],爲處理好的字串.
                        #$result["error"],錯誤訊息陣列.
                        #必填的參數:
                        $conf["stringProcess::correctCharacter"]["stringIn"]=$spiltString["dataArray"][0];#爲要處理的字串
                        #可省略的參數:
                        $conf["stringProcess::correctCharacter"]["selectedCharacter"]=array(" ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                        $conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                        $correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
                        unset($conf["stringProcess::correctCharacter"]);
                        
                        #如果 處理類別字串失敗
                        if($correctCharacter["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$correctCharacter;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #取得第一個變數的種類字串
                        $result["content"]["varAtype"][]=$correctCharacter["content"];
                        
                        }#for end
                
                #取得變數二($conf["dataArrayB"])的種類
                                        
                #涵式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳的參數:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #必填的參數:
                $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$rowStartLine+4];#要處理的字串。
                $conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
                #備註:
                #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                unset($conf["stringProcess::spiltString"]);
                
                #如果分割字串失敗
                if($spiltString["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                                
                        #設置錯誤訊息
                        $result["error"]=$spiltString;
                                
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #初始化儲存變數二($conf["dataArrayB"])的種類
                $result["content"]["varBtype"]=array();
                        
                #執行 分割成的段數-2 次迴圈(亦即去頭去尾)
                for($i=1;$i<$spiltString["dataCounts"]-1;$i++){
                        
                        #剔除變數二類別字串的空白
                        #涵式說明:
                        #處理字串避免網頁出錯
                        #回傳的結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["function"],當前執行的函數.
                        #$result["content"],爲處理好的字串.
                        #$result["error"],錯誤訊息陣列.
                        #必填的參數:
                        $conf["stringProcess::correctCharacter"]["stringIn"]=$spiltString["dataArray"][$i];#爲要處理的字串
                        #可省略的參數:
                        $conf["stringProcess::correctCharacter"]["selectedCharacter"]=array(" ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                        $conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                        $correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
                        unset($conf["stringProcess::correctCharacter"]);
                        
                        #如果處理字串失敗
                        if($correctCharacter["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$correctCharacter;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        #取得變數二類別
                        $result["content"]["varBtype"][]=$correctCharacter["content"];
                        
                        }#for end       
                
                #$executeR["lineArray"][$rowStartLine]
                
                #依據變數一與二建立交叉分析數據的頻率
                                                
                #執行迴圈直到遇到 "Column Total" 為止,一次加三
                for($i=$rowStartLine+6;$i<$executeR["lineCount"];$i=$i+3){
                        
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$i];#要處理的字串。
                        $conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
                        #備註:
                        #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                        unset($conf["stringProcess::spiltString"]);
                        
                        #如果分割字串失敗
                        if($spiltString["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$spiltString;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #搜尋分割好的第一個字串是否有關鍵字 "Column Total"
                        #函式說明:
                        #檢查字串裡面有無指定的關鍵字
                        #回傳的結果:
                        #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                        #$result["error"],錯誤訊息
                        #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                        #$result["keyWordCount"],找到的關鍵字數量.
                        #必填的參數:
                        $conf["search::findKeyWord"]["keyWord"]="Column Total";#想要搜尋的關鍵字
                        $conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
                        #可省略的參數:
                        #$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                        $findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
                        unset($conf["search::findKeyWord"]);
                        
                        #如果尋找關鍵字失敗
                        if($findKeyWord["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$findKeyWord;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #如果有找到關鍵字 "Column Total"
                        if($findKeyWord["founded"]=="true"){
                                
                                #跳出迴圈
                                break;
                                
                                }#if end
                        
                        #debug
                        #echo "<p>entered!<p>";
                        
                        #執行 分割成的段數-2 次迴圈(亦即去頭去尾)
                        for($j=1;$j<$spiltString["dataCounts"]-1;$j++){
                                
                                #debug
                                #echo "<p>entered!<p>";
                                
                                #剔除變數一類別字串的空白
                                #涵式說明:
                                #處理字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["function"],當前執行的函數.
                                #$result["content"],爲處理好的字串.
                                #$result["error"],錯誤訊息陣列.
                                #必填的參數:
                                $conf["stringProcess::correctCharacter"]["stringIn"]=$spiltString["dataArray"][0];#爲要處理的字串
                                #可省略的參數:
                                $conf["stringProcess::correctCharacter"]["selectedCharacter"]=array(" ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                $conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
                                unset($conf["stringProcess::correctCharacter"]);
                                
                                #如果 處理類別字串失敗
                                if($correctCharacter["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                                
                                        #設置錯誤訊息
                                        $result["error"]=$correctCharacter;
                                                
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                        
                                #暫存變數一的名稱
                                $var1Name=$correctCharacter["content"];
                                
                                #暫存變數二的名稱
                                $var2Name=$result["content"]["varBtype"][$j-1];
                                
                                #剔除變數一與類別二交叉的頻率字串的空白
                                #涵式說明:
                                #處理字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["function"],當前執行的函數.
                                #$result["content"],爲處理好的字串.
                                #$result["error"],錯誤訊息陣列.
                                #必填的參數:
                                $conf["stringProcess::correctCharacter"]["stringIn"]=$spiltString["dataArray"][$j];#爲要處理的字串
                                #可省略的參數:
                                $conf["stringProcess::correctCharacter"]["selectedCharacter"]=array(" ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                $conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
                                unset($conf["stringProcess::correctCharacter"]);
                                
                                #如果 處理類別字串失敗
                                if($correctCharacter["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                                
                                        #設置錯誤訊息
                                        $result["error"]=$correctCharacter;
                                                
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                        
                                #取得頻率
                                $result["content"]["array"][$var1Name][$var2Name]["count"]=$correctCharacter["content"];
                                                                
                                }#for end
                        
                        }#for end
                
                #依據變數一與二建立交叉分析數據的比例
                                                
                #執行迴圈直到遇到 "Column Total" 為止,一次加三
                for($i=$rowStartLine+7;$i<$executeR["lineCount"];$i=$i+3){
                
                        #debug
                        #echo "<p>entered!<p>";
                
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$i];#要處理的字串。
                        $conf["stringProcess::spiltString"]["spiltSymbol"]="|";#爲以哪個符號作爲分割
                        #備註:
                        #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                        unset($conf["stringProcess::spiltString"]);
                        
                        #debug
                        #var_dump($spiltString);
                                                        
                        #如果分割字串失敗
                        if($spiltString["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$spiltString;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #搜尋分割好的第一個字串是否有關鍵字 "-"
                        #函式說明:
                        #檢查字串裡面有無指定的關鍵字
                        #回傳的結果:
                        #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                        #$result["error"],錯誤訊息
                        #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                        #$result["keyWordCount"],找到的關鍵字數量.
                        #必填的參數:
                        $conf["search::findKeyWord"]["keyWord"]="-";#想要搜尋的關鍵字
                        $conf["search::findKeyWord"]["string"]=$spiltString["dataArray"][0];#要被搜尋的字串內容
                        #可省略的參數:
                        #$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                        $findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
                        unset($conf["search::findKeyWord"]);
                        
                        #如果尋找關鍵字失敗
                        if($findKeyWord["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$findKeyWord;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #如果有找到關鍵字 "-"
                        if($findKeyWord["founded"]=="true"){
                                
                                #跳出迴圈
                                break;
                                
                                }#if end
                                
                        #B變數有幾個類別就執行幾次
                        for($j=0;$j<count($result["content"]["varBtype"]);$j++){
                                
                                #debug
                                #echo "<p>entered!<p>";
                                
                                #debug
                                #var_dump($spiltString);
                                
                                #debug
                                #echo "\r\n".$spiltString["dataArray"][$j+1]."\r\n";
                                
                                #剔除變數A與B交叉的頻率比例字串的空白
                                #涵式說明:
                                #處理字串避免網頁出錯
                                #回傳的結果:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["function"],當前執行的函數.
                                #$result["content"],爲處理好的字串.
                                #$result["error"],錯誤訊息陣列.
                                #必填的參數:
                                $conf["stringProcess::correctCharacter"]["stringIn"]=$spiltString["dataArray"][$j+1];#爲要處理的字串
                                #可省略的參數:
                                $conf["stringProcess::correctCharacter"]["selectedCharacter"]=array(" ");#爲被選擇要處理的字串/字元,須爲陣列值。
                                        #若不設定則預設爲要將這些字串作替換("<",">","=","//","'","$","%","&","|","/*","*\/","#","\"")。
                                        #特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
                                $conf["stringProcess::correctCharacter"]["changeTo"]=array("");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
                                $correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
                                unset($conf["stringProcess::correctCharacter"]);
                                
                                #debug
                                #echo "\r\n\$i=".$i." \$rowStartLine=".$rowStartLine." BtypeCount=".count($result["content"]["varBtype"])."\r\n";
                                
                                #debug
                                #echo "\r\n".($i-7-$rowStartLine)/(3)."\r\n";
                                
                                #debug
                                #echo "\r\n[".$result["content"]["varAtype"][(($i-7-$rowStartLine)/3)]."][".$result["content"]["varBtype"][$j]."][\"radio\"]=".$correctCharacter["content"]."\r\n";
                                
                                #debug
                                #var_dump($correctCharacter);
                                
                                #如果剔除空白失敗
                                if($correctCharacter["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                                
                                        #設置錯誤訊息
                                        $result["error"]=$correctCharacter;
                                                
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                
                                #取得變數A與B交叉的比例
                                $result["content"]["array"][$result["content"]["varAtype"][($i-7-$rowStartLine)/(3)]][$result["content"]["varBtype"][$j]]["radio"]=$correctCharacter["content"];
                                
                                }#for end
                
                        }#for end
                
                #初始化儲存卡方檢定結果開始的列數
                $chiSquaredStartRow=0;
                
                #尋找 "Pearson's Chi-squared test" 所在的列數
                
                #有幾列輸出就執行幾次迴圈
                for($i=0;$i<$executeR["lineCount"];$i++){
                        
                        #定位到有 "Pearson's Chi-squared test" 的列
                        #函式說明:
                        #檢查字串裡面有無指定的關鍵字
                        #回傳的結果:
                        #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                        #$result["error"],錯誤訊息
                        #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                        #$result["keyWordCount"],找到的關鍵字數量.
                        #必填的參數:
                        $conf["search::findKeyWord"]["keyWord"]="Pearson's Chi-squared test";#想要搜尋的關鍵字
                        $conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
                        #可省略的參數:
                        #$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                        $findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
                        unset($conf["search::findKeyWord"]);
                        
                        #如果搜尋關鍵字失敗
                        if($findKeyWord["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$findKeyWord;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #如果有找到關鍵字
                        if($findKeyWord["founded"]=="true"){
                                
                                #取得卡方檢定結果開始的列數
                                $chiSquaredStartRow=$i;
                                
                                #跳出迴圈
                                break;
                                
                                }#if end
                        
                        }#for end
                                                
                #解析卡方檢定的結果
                #涵式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳的參數:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #必填的參數:
                $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$chiSquaredStartRow+2];#要處理的字串。
                $conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                #備註:
                #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                unset($conf["stringProcess::spiltString"]);
                
                #如果分割字串失敗
                if($spiltString["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                                
                        #設置錯誤訊息
                        $result["error"]=$spiltString;
                                
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得卡方值
                $result["content"]["chi2"]=$spiltString["dataArray"][2];
                
                #取得自由度
                $result["content"]["df"]=$spiltString["dataArray"][5];
                
                #取得p值
                $result["content"]["chi2pValue"]=$spiltString["dataArray"][8];
                
                #如果是小樣本(總樣本數30筆以下)
                if(count($conf["dataArrayA"])<30){
                                
                        #初始化儲存費雪檢定結果開始的列數
                        $fisherTestStartRow=0;
                        
                        #尋找 "Fisher's Exact Test for Count Data" 所在的列數
                        
                        #有幾列輸出就執行幾次迴圈
                        for($i=0;$i<$executeR["lineCount"];$i++){
                                
                                #定位到有 "Fisher's Exact Test for Count Data" 的列
                                #函式說明:
                                #檢查字串裡面有無指定的關鍵字
                                #回傳的結果:
                                #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                                #$result["error"],錯誤訊息
                                #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                                #$result["keyWordCount"],找到的關鍵字數量.
                                #必填的參數:
                                $conf["search::findKeyWord"]["keyWord"]="Fisher's Exact Test for Count Data";#想要搜尋的關鍵字
                                $conf["search::findKeyWord"]["string"]=$executeR["lineArray"][$i];#要被搜尋的字串內容
                                #可省略的參數:
                                #$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                                $findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
                                unset($conf["search::findKeyWord"]);
                                
                                #如果搜尋關鍵字失敗
                                if($findKeyWord["status"]=="false"){
                                        
                                        #設置執行不正常
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$findKeyWord;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end
                                        
                                #如果有找到關鍵字
                                if($findKeyWord["founded"]=="true"){
                                        
                                        #取得費雪檢定結果開始的列數
                                        $fisherTestStartRow=$i;
                                        
                                        #跳出迴圈
                                        break;
                                        
                                        }#if end
                                
                                }#for end
                                
                        #取得費雪檢定的兩變數關係                           
                        $result["content"]["fisherTestVarRelationship"]=$executeR["lineArray"][$fisherTestStartRow+2];  
                                
                        #解析費雪檢定結果       
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess::spiltString"]["stringIn"]=$executeR["lineArray"][$fisherTestStartRow+3];#要處理的字串。
                        $conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
                        #備註:
                        #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                        unset($conf["stringProcess::spiltString"]);
                        
                        #如果分割字串失敗
                        if($spiltString["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                        
                                #設置錯誤訊息
                                $result["error"]=$spiltString;
                                        
                                #回傳結果
                                return $result;
                                
                                }#if end
                                                                                        
                        #取得費雪檢定的p值
                        $result["content"]["fisherTestPvalue"]=$spiltString["dataArray"][2];
                        
                        }#if end
                        
                #反之是大於30筆樣本的大樣本
                else{
                                                        
                        #取得費雪檢定的兩變數關係                           
                        $result["content"]["fisherTestVarRelationship"]="不適用於大樣本";
                        
                        #取得費雪檢定的p值
                        $result["content"]["fisherTestPvalue"]="不適用於大樣本";
                        
                        }#else end
                                        
                #輸出網頁檔的位置
                #$conf["crossTableAddress"]
                
                #初始化儲存交叉分析表標題的字串
                $title="";
                
                #標題陣列變數有幾個就執行幾次迴圈
                for($i=0;$i<count($conf["title"]);$i++){
                        
                        #如果是最後一個元素
                        if($i==count($conf["title"])-1){
                        
                                $title=$title.$conf["title"][$i]."<p>";
                                
                                }#if end
                                
                        #反之不是最後一個元素
                        else{
                                
                                $title=$title.$conf["title"][$i]."<br>";
                                
                                }#else end
                        
                        }#for end
                
                #初始化交叉分析表格呈現的html語法
                $tableContent="<table border = 1px>";
                                
                #第一列開始
                $tableContent=$tableContent."<tr>";
                
                #第一列欄開始
                $tableContent=$tableContent."<td>".$conf["dnnStr"][0]."\\".$conf["dnnStr"][1]."</td>";
                
                #第一列變數B的種類名稱
                for($i=0;$i<count($result["content"]["varBtype"]);$i++){
                        
                        $tableContent=$tableContent."<td>".$result["content"]["varBtype"][$i]."</td>";
                        
                        }#for end
                        
                #第一列結束
                $tableContent=$tableContent."</tr>";
                
                #變數A有幾類就執行幾次
                for($i=0;$i<count($result["content"]["varAtype"]);$i++){
                        
                        #列的開始
                        $tableContent=$tableContent."<tr>";
                
                        #放置變數A的類別名稱
                        $tableContent=$tableContent."<td>".$result["content"]["varAtype"][$i]."</td>";
                
                        #變數B有幾種就執行幾次
                        for($k=0;$k<count($result["content"]["varBtype"]);$k++){
                                
                                #如果沒有比比例數值
                                if(!isset($result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"])){
                                        
                                        #預設為"0.0"
                                        $result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"]="0.0";
                                        
                                        }#if end
                                
                                #欄的內容
                                $tableContent=$tableContent."<td>".$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["count"]."<=>".$result["content"]["array"][$result["content"]["varAtype"][$i]][$result["content"]["varBtype"][$k]]["radio"]."</td>";
                                
                                }#for end
                                
                        #列的結束
                        $tableContent=$tableContent."</tr>";    
                                                                                
                        }#for end
                        
                #表格結束
                $tableContent=$tableContent."</table>";
                        
                #建立網頁檔
                #涵式說明:
                #將多行字串寫入到檔案
                #回傳的結果:
                #$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
                #$result["error"],錯誤訊息陣列.
                #必填的參數:
                #$conf["fileName"],字串,爲要編輯的檔案名稱
                $conf["fileAccess::writeMultiLine"]["fileName"]=$conf["crossTableAddress"].".html";
                #$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容
                        #$conf["inputString"][$i] 代表第 $i+1 行。
                $conf["fileAccess::writeMultiLine"]["inputString"][]="<html>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="<head>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="</head>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="<body>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]=$title;
                $conf["fileAccess::writeMultiLine"]["inputString"][]=$tableContent;
                $conf["fileAccess::writeMultiLine"]["inputString"][]="<p>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="卡方檢定 卡方值:".$result["content"]["chi2"]." 自由度:".$result["content"]["df"]." p值:".$result["content"]["chi2pValue"]."<p>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="費雪檢定 兩變數關係:".$result["content"]["fisherTestVarRelationship"]." p值:".$result["content"]["fisherTestPvalue"]."<br>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="</body>";
                $conf["fileAccess::writeMultiLine"]["inputString"][]="</html>";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["fileAccess::writeMultiLine"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                $createHtmlReport=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
                unset($conf["fileAccess::writeMultiLine"]);     
                
                #如果建立交叉分析報表網頁檔失敗
                if($createHtmlReport["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                                
                        #設置錯誤訊息
                        $result["error"]=$createHtmlReport;
                                
                        #回傳結果
                        return $result;
                        
                        }#if end                

                #取得產生的網頁檔位置
                $result["content"]["htmlReport"]=$conf["crossTableAddress"].".html";

                #設置執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function crossTable end
                
        /*
        #函式說明:
        #運用線性模式進行關聯分析
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["content"],分析結果
        #必填參數:
        #$conf["csvFile"],字串,要讀取的csv檔位置與名稱。
        $conf["csvFile"]="";
        #$conf["factorVarNameArray"],字串陣列,用於預測的變數欄位名稱。
        $conf["factorVarNameArray"]=array();
        #$conf["forcastVarName"],字串陣列,用於預測的變數欄位名稱。
        $conf["forcastVarName"]=array();
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #建構中...
        #目前考慮停止開發,因爲無法用名目尺度去推論。
        */
        public static function lm(&$conf){
                
                #初始化要回傳的結果
                $result=array();
                
                #如果 $conf 不等於 "array"
                if(gettype($conf)!="array"){                            
                        
                        #設定錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]="參數的Key指定有誤!";
                        
                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查必填參數
                #涵式說明:
                #檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                $conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
                $conf["variableCheck.isexistMulti"]["variableCheck"]=array("csvFile","factorVarNameArray","forcastVarName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
                #可以省略的參數:
                $conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","name");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
                $conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
                $checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
                unset($conf["variableCheck.isexistMulti"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #初始化要寫入到R腳本的逐行內容
                $dataToWrite=array();
                
                $dataToWrite[]="#線性迴歸分析";
                
                #涵式說明:
                #建立R檔案
                #回傳的結果:
                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                #$result["error"],錯誤訊息陣列.
                #$result["newCreatedRfilePathAndName"],R腳本檔的位置與名稱
                #必填的參數:
                $conf["R.writeRfile"]["addAndName"]=".R/".$_SESSION["username"]."-lm.R";#R檔案的位置與名稱
                $conf["R.writeRfile"]["textToWrite"]=array("");#要寫入的字串內容陣列,一個元素代表一行文字,每行結尾會自動換行。
                $writeRfileResult=R::writeRfile($conf["R.writeRfile"]);
                unset($conf["R.writeRfile"]);
                
                #如果 R 腳本寫入失敗
                if($writeRfileResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$writeRfileResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #取得R腳本的位置
                $rScriptAdd=$writeRfileResult["newCreatedRfilePathAndName"];
                
                #執行R腳本
                #函式說明:
                #執行R腳本,執行完畢後,會刪除R的腳本與暫存R執行後的輸出的檔案.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["errror"],錯誤訊息陣列
                #$result["lineArray"],字串陣列,R輸出結果,每個元素代表一行的輸出.
                #$result["lineCount"],整數,R輸出的總共行數.
                #必填的參數:
                #$conf["R.executeR"]["rPositionAndName"],字串,R腳本的位置與名稱.
                $conf["R.executeR"]["rPositionAndName"]=$rScriptAdd;
                #可省略的參數:
                #$conf["R.executeR"]["disbaleOptimal"],字串,"true"代表取消輸出的優化,可以顯示版本訊息、歡迎訊息、儲存暫存檔,預設為"false"要進行優化.
                #$conf["R.executeR"]["disbaleOptimal"]="true";
                $executeResult=R::executeR($conf["R.executeR"]);
                unset($conf["R.executeR"]);
                
                #如果執行R腳本出錯
                if($executeResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$executeResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                }#function lm end
                                        
        /*
        #函式說明:
        #避免超出4096bytes限制的條件下產生向量變數語法
        #請勿使用 vectorPart 作為R的變數,因為這是用於組合向量變數的暫存變數.
        #回傳結果:
        #$result["status"],執行正常與否,"true"代表正常;"false"代表不正常
        #$result["error"],錯誤訊息陣列
        #$result["function"],當前函數名稱
        #$result["rVectorCreate"],建立R向量變數的語法陣列,一個元素代表一列的內容。
        #$result["lineCount"],用了幾列程式完成向量變數的建立
        #必填參數:
        #$conf["vectorName"],字串,向量變數在R裡面的名稱。
        $conf["vectorName"]="";
        #$conf["vectorData"],陣列變數,要產生的向量變數資料。
        $conf["vectorData"]=array();
        #$conf["writeTarget"],參考陣列變數,向量變數產生的語法要寫入哪個儲存R腳本的陣列變數。
        $conf["writeTarget"]=&;
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */      
        public static function createFixedVectorVar(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #初始化儲存建立R向量變數的語法陣列
                $result["rVectorCreate"]=array();
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                #$conf["variableCheck.checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck.checkArguments"]["varInput"]=&$conf;
                #$conf["variableCheck.checkArguments"]"mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("vectorName","vectorData","writeTarget");
                #$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("string","array","array");
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
                #可以省略的參數:
                #$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
                #$conf["canBeEmptyString"]="false";
                #$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["skipableVariableName"]=array();
                #$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                #$conf["skipableVariableType"]=array();
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["skipableVarDefaultValue"]=array("");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                $checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
                unset($conf["variableCheck.checkArguments"]);
                
                #如果檢查失敗
                if($checkResult["status"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkResult["passed"]=="false"){
                        
                        #設置執行不正常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #計算 $conf["vectorData"] 10個一組,可以有幾組
                (int)$groupsCount=count($conf["vectorData"])/10;
                        
                #有幾組就執行幾次
                for($i=0;$i<$groupsCount;$i++){
                        
                        #初始化暫存向量變數語法的變數
                        $rVectorPart="vectorPart=c(";
                        
                        #一次最多執行10次
                        for($j=$i*10;$j<($i+1)*10;$j++){
                                
                                #如果已經讀完全部的向量變數了
                                if(!isset($conf["vectorData"][$j])){
                                        
                                        #debug
                                        #echo "entered!";
                                        
                                        #結束向量變數語法
                                        $rVectorPart=$rVectorPart.")";
                                        
                                        #跳出迴圈
                                        break;
                                        
                                        }#if end
                                
                                #如果是該組第一個向量資料
                                if($j==$i*10){
                                                                                                                                                                                
                                        #串聯建立向量變數的語法
                                        $rVectorPart=$rVectorPart."\"".$conf["vectorData"][$j]."\"";
                                
                                        }#if end
                                        
                                #反之不是該組第一個向量資料
                                else{
                                        
                                        #串聯建立向量變數的語法,向量資料前要加一個逗號。
                                        $rVectorPart=$rVectorPart.",\"".$conf["vectorData"][$j]."\"";
                                        
                                        }#else end
                                
                                #如果是該組的最後一個向量內容
                                if($j==($i+1)*10-1){
                                        
                                        #結束向量變數語法
                                        $rVectorPart=$rVectorPart.")";
                                        
                                        }#if end        
                                                                        
                                }#for end
                                
                        #儲存產生部分向量變數內容的R語法
                        $result["rVectorCreate"][]=$rVectorPart;
                                
                        #如果是第一組     
                        if($i==0){      
                                
                                #直接取得向量變數的內容
                                $result["rVectorCreate"][]=$conf["vectorName"]."=vectorPart";
                        
                                }#if end
                        
                        #反之不是第一組
                        else{
                                
                                #組合向量變數的內容
                                $result["rVectorCreate"][]=$conf["vectorName"]."=c(".$conf["vectorName"].",vectorPart)";
                                
                                }#else end
                        
                        }#for end
                        
                #$result["rVectorCreate"]有幾個元素就執行幾次
                for($i=0;$i<count($result["rVectorCreate"]);$i++){
                        
                        #增加一列建立向量變數的語法
                        $conf["writeTarget"][]=$result["rVectorCreate"][$i];
                        
                        }#for end
                
                #用了幾列程式完成向量變數的建立
                $result["lineCount"]=count($result["rVectorCreate"]);
                
                #設置執行正常的識別
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function createFixedVectorVar end     
        
        /*
        #函式說明:
        #求算相關係數(皮爾森係數),結果會回傳1數值。代表兩筆數據的相關層度,正值代表正相關;負值代表負相關。
        #回傳結果:
        #$result["status"],執行是否成功的識別,"true"代表執行正常,"false"代表執行不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱.
        #$result["content"],相關係數(皮爾森係數).
        #必填參數:
        #$conf["rawDataArrayA"],字串陣列,爲第1組數據,元素數量須與$rawDataArray["B"]一樣。
        $conf["rawDataArrayA"]=array("");
        #$conf["rawDataArrayB"],字串陣列,爲第2組數據,元素數量須與$rawDataArray["A"]一樣。
        $conf["rawDataArrayB"]=array("");
        #可省略參數:
        #無
        #參考資料:
        #http://www.statmethods.net/stats/correlations.html
        #備註:
        #建構中
        */
        public static function computeCorrelationCoefficientForNumbericData(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #記錄當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #初始化要回傳的相關係數(皮爾森係數)
                $result["content"]="";

                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if($conf==null){
                                
                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
                                
                                }#if end

                        #回傳結果
                        return $result;
                        
                        }#if end

                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填寫的參數:
                #$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("rawDataArrayA","rawDataArrayB");
                #$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
                #$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
                $conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
                #$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
                #$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                #$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                $conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("rawDataArrayA","rawDataArrayB");
                #參考資料來源:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);

                #如果檢查參數失敗
                if($checkArguments["status"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkArguments;

                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]=="false"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$checkArguments;

                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                
                
                }#function computeCorrelationCoefficientForNumbericData end     
                                                                        
        }#class R end

?>