Rev 3 | 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) 2014~2025 MIN ZHI, CHENThis file is part of QBPWCF.QBPWCF is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with QBPWCF. If not, see <http://www.gnu.org/licenses/>.*/namespace qbpwcf;/*類別說明:跟問卷整理與分析有關的類別.備註:無.*/class analyse{/*#函式說明:#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.#回傳結果:#$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/*#函式說明:#將逗號分隔的字串 "1,2,5,7" 變成 "1,1,0,0,1,0,1"#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["content"],分割好的字串#必填參數:#$conf["stringData"],字串,類似"1,2,5,7"的字串.$conf["stringData"]="";#可省略參數:#$conf["optionNameArray"],陣列,選項的名稱依序爲?#$conf["optionNameArray"]=array("a1,a2,a3,b1,b2,c1,d1,d2,d3,e");#參考資料:#無.#備註:#無*/public static function changeMultiChoiceToSingleChoice(&$conf){#初始化要回傳的內容$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#初始化要回傳的內容$result["content"]="";#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#儲存那幾個選項有勾選或未勾選的字串陣列$strArray=array();#如果 $conf["stringData"] 不存在if(!isset($conf["stringData"])){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="\$conf[\"stringData\"]參數未設定";#回傳錯誤訊息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"]=$conf["stringData"];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割$spiledStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果分割字串失敗if($spiledStr["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$spiledStr;#回傳錯誤訊息return $result;}#if end#將字串中的 " 符號去除#有幾個選項就執行幾次for($i=0;$i<$spiledStr["dataCounts"];$i++){#涵式說明:#處理字串避免網頁出錯#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數.#$result["content"],爲處理好的字串.#$result["error"],錯誤訊息陣列.#必天寫的參數:$conf["stringProcess"]["correctCharacter"]["stringIn"]=$spiledStr["dataArray"][$i];#爲要處理的字串#可省略參數:$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("\"");#爲被選擇要處理的字串/字元,須爲陣列值。#若不設定則預設爲要將這些字串作替換("<",">",";","=","#","*","'","$","%","&","|")。#$conf["changeTo"];#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);unset($conf["stringProcess"]["correctCharacter"]);#如果剔除 " 符號失敗if($correctCharacter["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$correctCharacter;#回傳錯誤訊息return $result;}#if end#取得處理好的字串$spiledStr["dataArray"][$i]=$correctCharacter["content"];}#for end#如果 $conf["optionNameArray"] 有設定if(isset($conf["optionNameArray"])){#取得選項的上限數值$conf["maxOptionNum"]=count($conf["optionNameArray"]);#有幾個選項就執行幾次for($i=0;$i<$spiledStr["dataCounts"];$i++){#取得當前選項的位置#涵式說明:#檢查一個數值是否與陣列裏面的元素相同,如果有相同的則會傳其變數內容。#回傳的結果:#$result["status"],"true"表示執行正確,"false"表示執行錯誤.#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.#$result["error"],錯誤訊息#$result["equalVarName"],相等的變數名稱或key.#$result["equalVarValue"],相等的變數數值內容.#必填參數:$conf["search"]["getEqualVar"]["conditionElement"]=$spiledStr["dataArray"][$i];#條件元素,要等於的元素內容。$conf["search"]["getEqualVar"]["compareElements"]=$conf["optionNameArray"];#要比對的陣列變數內容。$search["getEqualVar"]=search::getEqualVar($conf["search"]["getEqualVar"]);unset($conf["search"]["getEqualVar"]);#如果取得當前選項位置失敗if($search["getEqualVar"]["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$search;#回傳錯誤訊息return $result;}#if end#var_dump($search["getEqualVar"]);#如果 $search["getEqualVar"]["founded"] 爲 "true"if($search["getEqualVar"]["founded"]=="true"){#將其選項勾選處設爲1,表示有選擇$strArray[$search["getEqualVar"]["equalVarName"]]="1";}#if end}#for end}#if end#反之沒有設定else{#有幾個選項就執行幾次for($i=0;$i<$spiledStr["dataCounts"];$i++){#debug#var_dump($spiledStr["dataArray"][$i]);#將有填寫的選項設爲1#將 $result[["dataArray"][$i]] 設爲 1;$strArray[$spiledStr["dataArray"][$i]-1]="1";}#for end}#else end#檢查變數內容#var_dump($strArray);#檢查變數內容#var_dump($conf["maxOptionNum"]);#如果 $conf["maxOptionNum"] 有設定if(isset($conf["maxOptionNum"])){#將 $result 陣列中不存在的key指派爲0for($i=0;$i<$conf["maxOptionNum"];$i++){#如果該key不存在if(!isset($strArray[$i])){#則指派其key與 value$strArray[$i]="0";}#if end}#for end}#if end#反之沒有設定else{#檢查變數內容#var_dump($spiledStr["dataArray"]);#尋找 $spiledStr["dataArray"][$i] 陣列中的最大值#涵式說明:#找最大值,結果會回傳最大值.#回傳的結果#$result["status"],執行是否正常,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["key"],最大值原先的key.#$result["value"],最大值的數字.#必填參數:$conf["math"]["getMaxValue"]["rawDataArray"]=$spiledStr["dataArray"];#爲原始數據$maxValue=math::getMaxValue($conf["math"]["getMaxValue"]);unset($conf["math"]["getMaxValue"]);#如果取得 $spiledStr["dataArray"][$i] 陣列中的最大值失敗if($maxValue["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$maxValue;#回傳錯誤訊息return $result;}#if end$maxValue=$maxValue["value"];#將最大值視爲最後一個選項的號碼for($i=0;$i<$maxValue;$i++){#如果該key不存在if(!isset($strArray[$i])){#則指派其key與 value$strArray[$i]="0";}#if end}#for end}#else end#將 $result 陣列轉爲逗號分隔的字串("1","3","4","7")#$result陣列有幾個元素,就執行幾次for($i=0;$i<count($strArray);$i++){#如果是最後一個元素if($i==(count($strArray)-1)){#串接內容$result["content"]=$result["content"].$strArray[$i];}#if end#反之不是最後一個元素else{#串接內容,結尾用逗號$result["content"]=$result["content"].$strArray[$i].",";}#else end}#for end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function changeMultiChoiceToSingleChoice end/*#函式說明:#讀取csv檔案,一列代表一個選項填寫的情況,然後交由 analyse::changeMutiChoiceToSingleChoice 處理,並將結果寫入新的檔案裏面。#回傳的結果:#$result["status"],執行是否正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["outputCsvFileAddress"],處理完畢後新檔案的位置.#必填參數:#$conf["oriCsvFileAddAndName"],字串,原始csv檔案的位置.$conf["oriCsvFileAddAndName"]="";$conf["maxOptionNum"],字串,總共有幾個選項爲?$conf["maxOptionNum"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["newCsvFileAddAndName"],字串,處理好的新csv檔案位置.#$conf["newCsvFileAddAndName"]="";#$conf["optionNameArray"],陣列,選項的名稱依序爲?#$conf["optionNameArray"]=array("a1,a2,a3,b1,b2,c1,d1,d2,d3,e");#參考資料:#無.#備註:#無*/public static function changeMultiChoiceToSingleChoiceFromCsvFile(&$conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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("oriCsvFileAddAndName","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"]);#如果檢查參數失敗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#如果新檔案名稱已設置if(isset($conf["newCsvFileAddAndName"])){#確認新檔案是否不存在if(file_exists($conf["newCsvFileAddAndName"])==false){#不存在,所以建立新檔案#涵式說明:#將字串寫入到檔案#回傳的結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["newCsvFileAddAndName"];#爲要編輯的檔案名稱$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$fileCreateStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $fileCreateStatus["status"] 等於 "false"if($fileCreateStatus["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$fileCreateStatus;#回傳結果return $result;}#if end}#if end}#if end#反之沒有設定新檔案的位置與名稱else{#按照預設建立新檔案名稱與位置$conf["newCsvFileAddAndName"]=$conf["oriCsvFileAddAndName"]."(已處理過).csv";#不存在,所以建立新檔案#涵式說明:#將字串寫入到檔案#回傳的結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["newCsvFileAddAndName"];#爲要編輯的檔案名稱$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$fileCreateStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $fileCreateStatus["status"] 等於 "false"if($fileCreateStatus["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$fileCreateStatus;#回傳結果return $result;}#if end}#else end#初始化儲存處理好資訊的陣列$processedStrArray=array();#函式說明:#依據行號分隔抓取檔案的內容,結果會回傳一個陣列#回傳的變數說明:#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。#$result["error"],錯誤訊息提示#$result["fileContent"],爲檔案的內容陣列#$result["lineCount"],爲檔案內容總共的行數#$result["fullContent"],為檔案的完整內容#必填參數:$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["oriCsvFileAddAndName"];#爲檔案的位置以及名稱#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["getFileContent"]["fileArgu"]=$conf["fileArgu"];#參考資料:#file():取得檔案內容的行數#http://php.net/manual/en/function.file.php$fileGetResult=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);unset($conf["fileAccess"]["getFileContent"]);#如果 $fileGetResult["status"] 等於 "false"if($fileGetResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$fileGetResult;#回傳結果return $result;}#if end#有幾行內容就執行幾次for($i=0;$i<$fileGetResult["lineCount"];$i++){#涵式說明#將逗號分隔的字串 "1,2,5,7" 變成 "1,1,0,0,1,0,1"#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["content"],分割好的字串#必填參數:$conf["analyse"]["changeMutiChoiceToSingleChoice"]["stringData"]=$fileGetResult["fileContent"][$i];#類似"1,2,5,7"的字串#可省略參數:/* 無效的參數#如果 $conf["maxOptionNum"] 有設定if(isset($conf["maxOptionNum"])){#則套用之$conf["analyse"]["changeMutiChoiceToSingleChoice"]["maxOptionNum"]=$conf["maxOptionNum"];#最後一個問項的號碼爲?}#if end*/#如果 $conf["optionNameArray"] 有設定if(isset($conf["optionNameArray"])){#則套用之$conf["analyse"]["changeMutiChoiceToSingleChoice"]["optionNameArray"]=$conf["optionNameArray"];}#if end$changeMultiChoiceToSingleChoice=analyse::changeMultiChoiceToSingleChoice($conf["analyse"]["changeMutiChoiceToSingleChoice"]);#如果 analyse::changeMultiChoiceToSingleChoice 執行失敗if($changeMultiChoiceToSingleChoice["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$changeMultiChoiceToSingleChoice;#回傳結果return $result;}#if end#取得好的字串$processedStrArray[$i]=$changeMultiChoiceToSingleChoice["content"];#檢查變數內容#var_dump($conf["analyse"]["changeMutiChoiceToSingleChoice"]["optionNameArray"]);unset($conf["analyse"]["changeMutiChoiceToSingleChoice"]);}#for end#有幾行內容就執行幾次for($i=0;$i<$fileGetResult["lineCount"];$i++){#將取得的結果寫入到新檔案裏面#涵式說明:#將字串寫入到檔案#回傳的結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["newCsvFileAddAndName"];#爲要編輯的檔案名稱$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$processedStrArray[$i]."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$fileCreateStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $fileCreateStatus["status"] 等於 "false"if($fileCreateStatus["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$fileCreateStatus;#回傳結果return $result;}#if end}#for end#設置執行成功$result["status"]="true";#設置檔案的位置與名稱$result["outputCsvFileAddress"]=$conf["newCsvFileAddAndName"];#回傳結果return $result;}#function changeMutiChoiceToSingleChoiceFromCsvFile end/*#函式說明:#將兩份csv檔案裡面特定一個同名的欄位的數值進行對照,僅留下有相同數值的資料,然後回傳#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱#必填參數:#$conf["csvFileA"],字串,第1個csv檔案的位置與名稱$conf["csvFileA"]="";#$conf["csvFileB"],字串,第2個csv檔案的位置與名稱$conf["csvFileB"]="";#$conf["compareColumnName"],字串,要對照值是否相等的欄位名稱$conf["compareColumnName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["csvFilePathAndName"],字串,要儲存到哪個位置,副檔名csv會自動建立,預設會建立一個以系統時間命名的資料,裡面放以系統時間為名的csv檔案.#$conf["csvFilePathAndName"]="";#$conf["noDownload"],字串,如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置.#$conf["noDownload"]="true";#參考資料:#無.#備註:#無*/public static function mergePairedData(&$conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#涵式說明:#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。#回傳的結果:#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#必填參數:$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("csvFileA","csvFileB","compareColumnName","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);unset($conf["variableCheck"]);#如果檢查有誤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["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["csvFileA"];#csv檔案的位置#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$csvFileContentA=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]);#如果 $csvFileContentA["status"] 等於 "false"if($csvFileContentA["status"]=="false"){#設置執行失敗$result["false"]="false";#取得錯誤訊息$result["error"]=$csvFileContentA;#回傳結果return $result;}#if end#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["csvFileB"];#csv檔案的位置#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$csvFileContentB=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]);#如果 $csvFileContentB["status"] 等於 "false"if($csvFileContentB["status"]=="false"){#設置執行失敗$result["false"]="false";#取得錯誤訊息$result["error"]=$csvFileContentB;#回傳結果return $result;}#if end#取得csv檔案A的資料筆數$DataCountA=$csvFileContentA["lineArrayCount"];#取得csv檔案B的資料筆數$DataCountB=$csvFileContentB["lineArrayCount"];#初始化合併好的陣列變數$mergedArray=array();#初始化計屬的變數$time=0;#針對csv檔案A的每一筆資料for($i=0;$i<$DataCountA;$i++){#針對csv檔案B的每一筆資料for($j=0;$j<$DataCountB;$j++){#如果有發現csv檔案A與檔案B相同欄位的值有相同if($csvFileContentA["csvFileContent"][$i][$conf["compareColumnName"]]==$csvFileContentB["csvFileContent"][$j][$conf["compareColumnName"]]){#則將其合併#針對檔案A的每一個欄位foreach($csvFileContentA["csvFileContent"][$i] as $key=>$value){#取得每個欄位的內容$mergedArray["line"][$time][$key]=$value;}#foreach end#針對檔案B的每一個欄位foreach($csvFileContentB["csvFileContent"][$j] as $key=>$value){#如果不是要比較的變數欄位if($key!=$conf["compareColumnName"]){#取得每個欄位的內容$mergedArray["line"][$time][$key]=$value;}#if end}#foreach end#計數加1$time++;}#if end}#for end}#for end#將合併結果寫入到檔案裡面#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置#必填參數:$conf["csv"]["create"]["dataArray"]=$mergedArray["line"];#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["create"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#如果有設置 $conf["csvFilePathAndName"]if(isset($conf["csvFilePathAndName"])){$conf["csv"]["create"]["csvFilePathAndName"]=$conf["csvFilePathAndName"];#csv檔案輸出的路徑.}#if end#如果有設置 $conf["noDownload"]if(isset($conf["noDownload"])){#如果其等於 "true"if($conf["noDownload"]=="true"){#設定不自動下載檔案$conf["csv"]["create"]["noDownload"]=$conf["noDownload"];}#if end}#if end#$conf["csv"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置#參考資料來源:#http://php.net/manual/en/function.str-split.php$csvCreateResult=csv::create($conf["csv"]["create"]);unset($conf["csv"]["create"]);#如果檢查有誤if($csvCreateResult["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$csvCreateResult;#回傳結果return $result;}#if end#儲存csv檔案$result["content"]=$csvCreateResult["content"];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function mergePairedData end/*#函式說明:#刪除csv檔中多個欄位中其數值符合指定條件的資料(將該列刪除).#回傳的結果:#$result["status"],執行是否成功的識別.#$result["error"],錯誤訊息.#$result["csvFileAddress"],處理好的csv檔案位置.#$result["function"],當前執行的函數名稱.#檔案的路徑或下載該檔案的動作#必填參數:#$conf["csvFileLocation"],字串,要進行處理的csv位置與名稱$conf["csvFileLocation"]="";#$conf["coditionColumn"],陣列,要檢查的欄位名稱$conf["coditionColumn"]=array();#$conf["coditionValue"],字串,欄位數值內容若等於多少則符合要移除的條件$conf["coditionValue"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["csvFilePathAndName"],字串,輸出的csv檔案位置與名稱,csv副檔名會自動補上.#$conf["csvFilePathAndName"]="";#$conf["noDownload"],字串,如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置.#$conf["noDownload"]="true";#參考資料:#無.#備註:#無*/public static function delSepecificData(&$conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#涵式說明:#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。#回傳的結果:#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#必填參數:$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("csvFileLocation","coditionColumn","coditionValue","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);unset($conf["variableCheck"]["isexistMuti"]);#如果檢查必填參數失敗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["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["firstLineVarName"]爲"true"的話則會回傳 $csvFileContent["line"]["第幾行"]["第一行各個欄位的名稱"]#必填參數:$conf["csv"]["loadCsvFile"]["csvFilePositionAndName"]=$conf["csvFileLocation"];#csv檔案的位置#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$csvFileContent=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果讀取csv檔案的內容失敗if($csvFileContent["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$csvFileContent;#回傳結果return $result;}#if end#初始化要紀錄整理好的資料$arrayData=array();#針對每一筆資料/每一列for($i=0;$i<$csvFileContent["lineArrayCount"];$i++){#初始化是否要移除的變數為 "false"$del="false";#如果是標題列if($i!=0){#針對每一筆資料的各個欄位foreach($csvFileContent["csvFileContent"][$i] as $key=>$value){#有幾個要檢查的欄位就執行幾次for($j=0;$j<count($conf["coditionColumn"]);$j++){#如果是要檢查的欄位if($key==$conf["coditionColumn"][$j]){#檢查其數值是否等於 $conf["coditionValue"]if($value==$conf["coditionValue"]){#將是否移除的變數設為"true"$del="true";#跳出 forbreak;}#if end}#if end}#for end}#foreach end}#end#如果 $del等於 "false"if($del=="false"){#紀錄該筆資料$arrayData["line"][]=$csvFileContent["csvFileContent"][$i];}#if end}#for end#將處理好的內容轉成csv檔#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["content"],輸出的csv檔案位置.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["create"]["fileArgu"]=$conf["fileArgu"];$conf["csv"]["create"]["dataArray"]=$arrayData["line"];#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。#可省略參數:#如果 $conf["csvFilePathAndName"]有設置if(isset($conf["csvFilePathAndName"])){#設置要輸出到哪個位置$conf["csv"]["create"]["csvFilePathAndName"]=$conf["csvFilePathAndName"];}#if end#如果有設置 $conf["noDownload"]if(isset($conf["noDownload"])){#如果其等於 "true"if($conf["noDownload"]=="true"){#設定不自動下載檔案$conf["csv"]["create"]["noDownload"]=$conf["noDownload"];}#if end}#if end$conf["ssv"]["create"]["csvFilePathAndName"]=$conf["csvFilePathAndName"];#要儲存到哪個位置,預設爲跟網頁檔案一樣的位置#$conf["csv"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置#參考資料來源:#http://php.net/manual/en/function.str-split.php$csvCreateResult=csv::create($conf["csv"]["create"]);unset($conf["csv"]["create"]);#如果 $csvCreateResult["status"] 等於 "false"if($csvCreateResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$csvCreateResult;#回傳結果return $result;}#if end#設置執行正常的識別$result["status"]="true";#取得處理好的檔案路徑$result["csvFileAddress"]=$csvCreateResult["content"];#回傳結果return $result;}#function delSepecificData end/*#函式說明:#將用於統計分析的原始的陣列中將一個變數分成兩個變數,並且新增在原始的陣列中#回傳的結果:#$result["status"],執行是否正常,正常的話為"true",不正常的話為"false".#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱#$result["content"],過增加兩個欄位(統計學上的變數)後的陣列變數#$result["content"][n1][n2],爲第n1行的n2欄位數值內容#必填參數:#$conf["varArray"],陣列,要處理的陣列變數$conf["varArray"]=array();#$conf["addFromVar"],陣列,要從哪些元素來產生要新的變數內容$conf["addFromVar"]=array("");#$conf["newVarName"],字串,資料是新產生的欄位(變數)名稱$conf["newVarName"]="";#$conf["newVarValue"],陣列,要增加變數的數值內容陣列,須與$conf["addFromVar"]的元素數量相同.$conf["newVarValue"]=array();#$conf["sameValueColumnName"],陣列,使用舊有資料的新欄位(變數)名稱.$conf["sameValueColumnName"]=array();#可省略參數:#$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱)#$conf["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料:#無.#備註:#無*/public static function add2Var($conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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["analyse"]["isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數$conf["analyse"]["isexistMulti"]["variableCheck"]=array("varArray","addFromVar","newVarName","newVarValue","sameValueColumnName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["analyse"]["isexistMulti"]["variableType"]=array("string","array","string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["analyse"]["isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["analyse"]["isexistMulti"]);unset($conf["analyse"]["isexistMulti"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#計數用的變數$times=0;#初始化暫存變數名稱的陣列$varTitleArray=array();#一行行處理(一筆筆處理)for($i=0;$i<count($conf["varArray"]);$i++){#初始化暫存每行變數內容的陣列$tempArray=array();#初始化計數元素欄位數的暫存變數$j=0;#如果是在處理標題行,且有設定 $conf["firstLineVarName"]if($i==0 && isset($conf["firstLineVarName"]) ){#如果 $conf["firstLineVarName"] 等於 trueif($conf["firstLineVarName"]=="true"){#針對每行各欄位foreach($conf["varArray"][$i] as $key=>$value){#取得標題行變數$varTitleArray[$key]=$value;}#foreach end#取得標題行新增的變數$varTitleArray[$conf["newVarName"]]=$conf["newVarName"];$varTitleArray[$conf["sameValueColumnName"]]=$conf["sameValueColumnName"];#取得標題列$result["content"][$times]=$varTitleArray;#計數加1$times++;}#if end}#if end#反之代表不是標題列else{#針對要從哪些變數產生新變數內容的陣列for($k=0;$k<count($conf["addFromVar"]);$k++){#針對每行各欄位foreach($conf["varArray"][$i] as $key=>$value){#先儲存原始的內容$tempArray[$key]=$value;}#foreach end#新增一個元素$tempArray[$conf["newVarName"]]=$conf["newVarValue"][$k];#新增一個元素$tempArray[$conf["sameValueColumnName"]]=$conf["varArray"][$i][$conf["addFromVar"][$k]];#儲存新行$result["content"][$times]=$tempArray;#計算總共有幾筆的計數+1$times++;#如果已經是最後一個欄位if($j=count($conf["newVarValue"])+1){#將之初始化爲0$j=0;}#if end#反之不是最後一各欄位else{#欄位計數加1$j++;}#else end}#for end}#if end}#for end#設置執行正常的識別$result["status"]="true";#回傳結果return $result;}#function add2Var end/*#函式說明:#將csv檔中的一個變數變成兩個變數,並輸出成csv檔。#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["outputCsvFileAddress"],csv檔案輸出的位置與名稱.#必填參數:#$conf["csvFileLocation"],字串,csv檔案的位置.$conf["csvFileLocation"]="";#$conf["addFromVar"],陣列,要從哪些元素來產生要新的變數內容.$conf["addFromVar"]=array("");#$conf["newVarName"],字串,資料是新產生的欄位(變數)名稱.$conf["newVarName"]="";#$conf["sameValueColumnName"],字串,使用舊有資料的新欄位(變數)名稱.$conf["sameValueColumnName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["newVarValue"],陣列,要增加變數的數值內容陣列,須與$conf["addFromVar"]的元素數量相同。預設與$conf["addFromVar"]相同#$conf["newVarValue"]=array();#$conf["outputCsvFilePathAndName"],字串,要儲存到哪個位置,預設爲跟網頁檔案一樣的位置,檔案名稱預設爲系統時間,副檔名csv會自動加上.#$conf["outputCsvFilePathAndName"]="";#$conf["noDownload"],字串,如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置.#$conf["noDownload"]="true";#參考資料:#無.#備註:#可能需要優化效能*/public static function build2VarForm1(&$conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#涵式說明:#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。#回傳的結果:#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#必填參數:$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("csvFileLocation","addFromVar","newVarName","sameValueColumnName","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);unset($conf["variableCheck"]["isexistMuti"]);#如果檢查不通過if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["csvFileLocation"];#csv檔案的位置#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$csvFileContent=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#檢查變數內容#var_dump($csvFileContent);#如果讀取csv檔案失敗if($csvFileContent["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$csvFileContent;#回傳結果return $result;}#if end#如果 $conf["newVarValue"] 沒有設定if(!isset($conf["newVarValue"])){#則 $conf["newVarValue"] 設為 $conf["addFromVar"]$conf["newVarValue"]=$conf["addFromVar"];}#if end#涵式說明:#從原始的陣列中將一個變數分成兩個變數,並且新增在原始的陣列中#回傳的結果:#$result["status"],執行是否正常,正常的話為"true",不正常的話為"false".#$result["error"],錯誤訊息.#$result["content"],過增加兩個欄位(統計學上的變數)後的陣列變數#$result["content"][n1][n2],爲第n1行的n2欄位數值內容#必填參數:$conf["math"]["add2Var"]["varArray"]=$csvFileContent["csvFileContent"];#要處理的陣列變數$conf["math"]["add2Var"]["addFromVar"]=$conf["addFromVar"];#要從哪些元素來產生要新的變數內容$conf["math"]["add2Var"]["newVarName"]=$conf["newVarName"];#要新增的變數(欄位)名稱$conf["math"]["add2Var"]["newVarValue"]=$conf["newVarValue"];#要增加變數的數值內容陣列,須與$conf["addFromVar"]的元素數量相同。$conf["math"]["add2Var"]["sameValueColumnName"]=$conf["sameValueColumnName"];#要新增的變數(欄位)名稱#可省略參數:$conf["math"]["add2Var"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)$addedCsvFile=analyse::add2Var($conf["math"]["add2Var"]);unset($conf["math"]["add2Var"]);#如果analyse::add2Var執行失敗if($addedCsvFile["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$addedCsvFile;#回傳結果return $result;}#if end#將處理好的內容轉成csv檔#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["content"],輸出的csv檔案位置.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["create"]["fileArgu"]=$conf["fileArgu"];$conf["csv"]["create"]["dataArray"]=$addedCsvFile["content"];#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。#可省略參數:#如果有設置 $conf["outputCsvFilePathAndName"]if(isset($conf["outputCsvFilePathAndName"])){#將輸出目錄與名稱設為 $conf["outputCsvFilePathAndName"]$conf["csv"]["create"]["csvFilePathAndName"]=$conf["outputCsvFilePathAndName"];#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.}#if end#如果有設置 $conf["noDownload"]if(isset($conf["noDownload"])){#如果其等於 "true"if($conf["noDownload"]=="true"){#設定自動下載檔案$conf["csv"]["create"]["noDownload"]=$conf["noDownload"];}#if end}#if end#$conf["csv"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置#參考資料來源:#http://php.net/manual/en/function.str-split.php$csvFileCreateResult=csv::create($conf["csv"]["create"]);unset($conf["csv"]["create"]);#如果 $csvFileCreateResult["status"] 等於 "false"if($csvFileCreateResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$csvFileCreateResult;#回傳結果return $result;}#if end#執行到這邊代表執行正常$result["status"]="true";#儲存csv檔輸出的路徑$result["outputCsvFileAddress"]=$csvFileCreateResult["content"];#回傳結果return $result;}#function addSample end/*#函式說明:#將單一欄格式為"a1,a2,a3,b1,b4,c5,c6,d1"且#a的選項有a1,a2,a3.#b的選項有b1,b2,b3.b4,b5#c的選項有c1,c2,c3,c4,c5,c6#d的選項有d1,d2,d3#的字串轉變成1,2,3,5,7,13,14,15#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["content"],處理好的字串.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["inputStr"],要處理的字串.$conf["inputStr"]="";#$conf["leaderWordArray"],字串陣列,為代表某一類的代號陣列,請按照順序排列.$conf["leaderWordArray"]=array("a","b","c");#$conf["leaderWordOptionCountArray"],字串陣列,每類代號的選項數目,請按照順序排列.$conf["leaderWordOptionCountArray"]=array("3","5","6");#可省略參數:#無.#參考資料:#無.#備註:#無*/public static function changeToNumberList(&$conf){#初始化要回傳的內容$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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("inputStr","leaderWordArray","leaderWordOptionCountArray");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","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"] 等於 "fasle"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#初始化編號對應的號碼順序陣列$pairedTable=array();#有幾個非數字開頭的編號前置字串,就執行幾次.for($i=0;$i<count($conf["leaderWordArray"]);$i++){#針對每個非數字開頭編號前置字串的選項數量for($j=0;$j<$conf["leaderWordOptionCountArray"][$i];$j++){#儲存編號對應的數字順序號碼$pairedTable[]=$conf["leaderWordArray"][$i].(string)($j+1);#var_dump($pairedTable);}#for end}#for end#var_dump($pairedTable);#將輸入字串用「,」分隔#涵式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess"]["spiltString"]["stringIn"]=$conf["inputStr"];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割$spiltedStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果 $spiltedStr["status"] 等於 "false"if($spiltedStr["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedStr;#回傳結果return $result;}#if end#初始化編號轉換過後對應的號碼順序陣列$transformedNumber=array();#針對輸入有幾個編號for($i=0;$i<$spiltedStr["dataCounts"];$i++){#判斷編號對應的數字為何#涵式說明:#檢查一個數值是否與陣列裏面的元素相同#回傳的結果:#$result["status"],"true"表示執行正確,"false"表示執行錯誤.#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.#$result["error"],錯誤訊息#$result["function"],當前執行的函數名稱#$result["equalVarName"],相等的變數名稱或key.#$result["equalVarValue"],相等的變數數值內容.#必填參數:$conf["search"]["getEqualVar"]["conditionElement"]=$spiltedStr["dataArray"][$i];#條件元素,要等於的元素內容。$conf["search"]["getEqualVar"]["compareElements"]=$pairedTable;#要比對的陣列變數內容。$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);unset($conf["search"]["getEqualVar"]);#如果搜尋出錯if($searchResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$searchResult;#回傳結果return $result;}#if end#如果沒有找到編號對應的數字if($searchResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$searchResult;#回傳結果return $result;}#if end#儲存編號對應到的數字號碼$transformedNumber[]=$searchResult["equalVarName"]+1;}#for end#將轉換好的數字陣列變成用「,」分隔字串#函式說明:#將陣列裡的元素內容用特定符號連接在一起變成字串.#回傳的結果:#$result["statu"],執行是否正常,"true"代表執行正常,"false"代表執行失敗#$result["error"],錯誤訊息陣列.#$result["content"],處理過後的字串.#必填的字串:#$conf["inputArray"],字串陣列,要處理的陣列.$conf["stringProcess"]["combineElementWithSymbol"]["inputArray"]=$transformedNumber;#$conf["combineSymbol"],字串,用來連結各元素的符號.$conf["stringProcess"]["combineElementWithSymbol"]["combineSymbol"]=",";$combineedStr=stringProcess::combineElementWithSymbol($conf["stringProcess"]["combineElementWithSymbol"]);unset($conf["stringProcess"]["combineElementWithSymbol"]);# $combineedStr["status"] 為 "false"if($combineedStr["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$combineedStr;#回傳結果return $result;}#if end#取得處理好的字串$result["content"]=$combineedStr["content"];#執行到這邊代表正常#設置執行正常$result["status"]="true";#回傳結果return $result;}#function changeToNumberList end/*#函式說明:#將csv檔中多行用「,」分隔且有不同前置字元的順序字串,變成多行用數字且按順序排列用「,」分隔的csv檔案.#回傳的結果:#$result["status"],執形式否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["csvFile"],處理好的csv檔案位置與名稱.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["csvIn"],字串,要處理的csv檔案;$conf["csvIn"]=".csv";#$conf["leaderWordArray"],陣列,為代表某一類的代號陣列,請按照順序排列.$conf["leaderWordArray"]=array();#$conf["leaderWordOptionCountArray"],陣列,每類代號的選項數目,請按照順序排列.$conf["leaderWordOptionCountArray"]=array();#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["csvOutFilePathAndName"],字串,輸出的檔案要存放在那裡與其名稱為何?預設為同目錄底下其檔案名稱為系統時間.#$conf["csvOutFilePathAndName"]="";#$conf["noDownload"],字串,"true"代表要立即下載產生好的csv檔案,"false"代表不要立即下載,預設為"true".#$conf["noDownload"]="true";#參考資料:#無.#備註:#無*/public static function changeToNumberListInCsv(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#產生系統時間#回傳西元的目前時間,格式為2010年07月24日15時30分33秒#必填參數:$conf["time::getFullDateAndTime"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php#ex:"Asia/Taipei"#可省略參數:#$conf["showSecond"]="true";#若爲"true"則會顯示秒數$systemTime=time::getFullDateAndTime($conf["time::getFullDateAndTime"]);unset($conf["time::getFullDateAndTime"]);#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$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"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("csvIn","leaderWordArray","leaderWordOptionCountArray","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","array","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("csvOutFilePathAndName","noDownload");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($systemTime,"true");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkResult["status"] 等於 "fasle"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["csvIn"];#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)$csv=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果 $csv["status"] 等於 "false"if($csv["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$csv;#回傳結果return $result;}#if end#初始化處理好的字串陣列$processedStrArray=array();#針對每個 $csv["csvFileContent"] 中的元素foreach($csv["csvFileContent"] as $row){#函式說明:#將單一欄格式為"a1,a2,a3,b1,b4,c5,c6,d1"且#a的選項有a1,a2,a3.#b的選項有b1,b2,b3.b4,b5#c的選項有c1,c2,c3,c4,c5,c6#d的選項有d1,d2,d3#的字串轉變成1,2,3,5,7,13,14,15#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["content"],處理好的字串#必填參數:#$conf["inputStr"],要處理的字串.$conf["analyse"]["changeToNumberList"]["inputStr"]=$row[0];#$conf["leaderWordArray"],字串陣列,為代表某一類的代號陣列,請按照順序排列.$conf["analyse"]["changeToNumberList"]["leaderWordArray"]=$conf["leaderWordArray"];#$conf["leaderWordOptionCountArray"],字串陣列,每類代號的選項數目,請按照順序排列.$conf["analyse"]["changeToNumberList"]["leaderWordOptionCountArray"]=$conf["leaderWordOptionCountArray"];$processedStr=analyse::changeToNumberList($conf["analyse"]["changeToNumberList"]);unset($conf["analyse"]["changeToNumberList"]);#如果 $processedStr["status"] 等於 "false"if($processedStr["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$processedStr;#回傳結果return $result;}#if end#記錄處理好的字串$processedStrArray[][]=$processedStr["content"];}#foreach end#將 $processedStrArray 寫入到 csv 檔案裡面.#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["function"],取得當前執行的函數名稱#$result["content"],輸出的csv檔案位置.#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置#必填參數:$conf["csv"]["create"]["dataArray"]=$processedStrArray;#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["create"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["csvFilePathAndName"]="";#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.$conf["csv"]["create"]["csvFilePathAndName"]=$conf["csvOutFilePathAndName"];$conf["csv"]["create"]["noDownload"]=$conf["noDownload"];#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置#參考資料來源:#http://php.net/manual/en/function.str-split.php$create=csv::create($conf["csv"]["create"]);unset($conf["csv"]["create"]);#如果建立csv檔案失敗if($create["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$create;#回傳結果return $result;}#if end#取得產生出來的csv檔案位置$result["csvFile"]=$create["content"];#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function changeToNumberListInCsv end/*#函式說明:#將csv檔的時間欄位格式「2009-07-11 13:21:45」分為多個欄位,變成年、月、日、時、分、秒等六個欄位,然後下載.#回傳的結果:#$result["status"],執行是否正確,"true"代表正確,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["csvFilePathAndName"],輸出的csv檔案路徑與檔案名稱.#必填參數:#$conf["oriCsvFilePath"]="";#字串,要轉換的單一版本問卷樣本.#$conf["outputCsvFilePath"]="";#字串,轉換好的問卷樣本要儲存到哪邊,副檔名csv要加上.#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["noDownlaod"],字串,是否不要立即下載產生好的csv檔案,"true"為不立即下載,"false"為立即下載,預設為"true".#$conf["noDownlaod"]="true";#參考資料:#無.#備註:#無*/public static function spiltTimeColumn($conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("oriCsvFilePath","outputCsvFilePath","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDownload");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $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#讀取csv檔案#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["oriCsvFilePath"];#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)$csvFile=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果 $csvFile["status"] 等於 "false"if($csvFile["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$csvFile;#回傳結果return $result;}#if end#初始化儲存分割好的時間資料陣列$time["year"]=array();#西元年$time["month"]=array();#月份$time["day"]=array();#天$time["week"]=array();#星期$time["hour"]=array();#小時$time["min"]=array();#分鐘$time["sec"]=array();#秒#針每行資料foreach($csvFile["csvFileContent"] as $timeStr){#將第一個欄位依據 " " 進行分段#涵式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess"]["spiltString"]["stringIn"]=$timeStr[0];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割$spiltedTimeStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果 $spiltedTimeStr["status"] 等於 "false"if($spiltedTimeStr["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedTimeStr;#回傳結果return $result;}#if end#照理說會分成兩段#如果不是分成兩段,勢必有錯誤發生if($spiltedTimeStr["dataCounts"]!=2){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedTimeStr;#設置錯誤訊息$result["error"][]="時間欄位字串用 \" \" 分割應該會分割出兩段字串才對!";#回傳結果return $result;}#if end#將 $spiltedTimeStr["dataArray"][0] 用「-」分成西元年月日#涵式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess"]["spiltString"]["stringIn"]=$spiltedTimeStr["dataArray"][0];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]="-";#爲以哪個符號作爲分割$spiltedTimeStrPart1=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果 $spiltedTimeStrPart1["status"] 等於 "false"if($spiltedTimeStrPart1["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedTimeStrPart1;#回傳結果return $result;}#if end#照理說會分成三段#如果不是分成三段,勢必有錯誤發生if($spiltedTimeStrPart1["dataCounts"]!=3){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedTimeStrPart1;#設置錯誤訊息$result["error"][]="年月日時間欄位字串用 \"-\" 分割應該會分割出三段字串才對!";#回傳結果return $result;}#if end#取得年$time["year"][]=$spiltedTimeStrPart1["dataArray"][0];#取得月$time["month"][]=$spiltedTimeStrPart1["dataArray"][1];#取得日$time["day"][]=$spiltedTimeStrPart1["dataArray"][2];#函式說明:#計算特定年月日為星期幾#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["content"],0~6,依序代表星期天到星期六.#必填參數:#$conf["time"]["computeWeekNumber"]["year"],字串,要求算該日為星期幾的所屬年份.$conf["time"]["computeWeekNumber"]["year"]=$spiltedTimeStrPart1["dataArray"][0];#$conf["time"]["computeWeekNumber"]["month"],字串,要求算該日為星期幾的所屬月份.$conf["time"]["computeWeekNumber"]["month"]=$spiltedTimeStrPart1["dataArray"][1];#$conf["time"]["computeWeekNumber"]["day"],字串,要求算該日為星期幾的日.$conf["time"]["computeWeekNumber"]["day"]=$spiltedTimeStrPart1["dataArray"][2];$getWeekResult=time::computeWeekNumber($conf["time"]["computeWeekNumber"]);unset($conf["time"]["computeWeekNumber"]);#如果 $getWeekResult["status"] 等於 "false"if($getWeekResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getWeekResult;#回傳結果return $result;}#if end#取得星期$time["week"][]=$getWeekResult["content"][0];#將 $spiltedTimeStr["dataArray"][1] 用「:」分成時分秒#涵式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess"]["spiltString"]["stringIn"]=$spiltedTimeStr["dataArray"][1];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]=":";#爲以哪個符號作爲分割$spiltedTimeStrPart2=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果 $spiltedTimeStrPart2["status"] 等於 "false"if($spiltedTimeStrPart2["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedTimeStrPart2;#回傳結果return $result;}#if end#照理說會分成三段#如果不是分成三段,勢必有錯誤發生if($spiltedTimeStrPart2["dataCounts"]!=3){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltedTimeStrPart2;#設置錯誤訊息$result["error"][]="時分秒時間欄位字串用 \":\" 分割應該會分割出三段字串才對!";#回傳結果return $result;}#if end#取得時$time["hour"][]=$spiltedTimeStrPart2["dataArray"][0];#取得分$time["min"][]=$spiltedTimeStrPart2["dataArray"][1];#取得秒$time["sec"][]=$spiltedTimeStrPart2["dataArray"][2];}#foreach end#初始化要寫入到csv檔裡面的2維陣列.$dataArrayToWrite=array(array());#轉換要寫入的檔案內容#根據有幾筆資料for($i=0;$i<count($time["year"]);$i++){#取得每個時間欄位的內容$dataArrayToWrite[$i][]=$time["year"][$i];#西元年$dataArrayToWrite[$i][]=$time["month"][$i];#月份$dataArrayToWrite[$i][]=$time["day"][$i];#天$dataArrayToWrite[$i][]=$time["week"][$i];#星期$dataArrayToWrite[$i][]=$time["hour"][$i];#小時$dataArrayToWrite[$i][]=$time["min"][$i];#分鐘$dataArrayToWrite[$i][]=$time["sec"][$i];#秒}#foreach end#依據每筆資料的年月日時分秒依序寫入到不同的欄位裡面.#建立新的csv檔案#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["content"],輸出的csv檔案位置.#必填參數:$conf["csv"]["create"]["dataArray"]=$dataArrayToWrite;#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["create"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv"]["create"]["csvFilePathAndName"]=$conf["outputCsvFilePath"];#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.$conf["csv"]["create"]["noDownload"]=$conf["noDownload"];#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置#參考資料來源:#http://php.net/manual/en/function.str-split.php$csvCreateResult=csv::create($conf["csv"]["create"]);unset($conf["csv"]["create"]);#var_dump($csvCreateResult);#如果 $csvCreateResult["status"] 等於 "false"if($csvCreateResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$csvCreateResult;#回傳結果return $result;}#if end#記錄產生好的csv檔案位置$result["csvFilePathAndName"]=$csvCreateResult["content"];#執行到這表代表執行正常$result["status"]="true";#回傳結果return $result;}#function spiltTimeColumn end/*#函式說明:#透過專用的問卷設定檔與問卷樣本檔來將問卷樣本匯入資料表#問卷樣本檔的#第1列各欄位依序為 "sampleNo"(樣本編號),題目(以;區隔的填寫選項,結尾也要;),"year"(調查時間的西元年),"month"(調查時間的月份),"week"(調查時間所屬星期),"day"(調查時間的日),"hour"(調查時間的時),"min"(調查時間的分),"sec"(調查時間的秒).#第1列第1欄代表樣本編號的標題,不需要從1開始,只要可以識別是跟其他樣本不同即可.#第1列第2欄代表樣本第1題的代號#第2列第1欄代表第1個樣本的編號#第2列第2欄代表第1個樣本的第1題回答內容,#填寫的選項之間用分號「;」分隔#第m列第1欄代表第m-1個樣本的編號#第m列第n欄代表第m-1個樣本的第n-1題回答內容#week欄位的內容為從0~6的數字,依序以星期日,星期一,星期二...到星期六#問卷資訊檔題目設定必須跟資料庫中的問卷題目設定相同,否則該樣本題項將不會匯入。#回傳的結果:#$result["status"],執行是否正確,"true"代表正確,"false"代表不正常.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息陣列#必填參數:#$conf["questionnaireSamplePath"],字串,要轉換的單一版本問卷樣本.$conf["questionnaireSamplePath"]="";#$conf["questionnaireSetupCsvPath"],字串,記錄問卷資訊的csv檔案.$conf["questionnaireSetupCsvPath"]="";#$conf["dbAddress"],字串,問卷資料庫的網路位址.$conf["dbAddress"]=$dbAddress;#$conf["dbAccount"],字串,要連線到資料庫時所用的帳戶名稱.$conf["dbAccount"]=$dbAccount;#$conf["dbName"],字串,問卷相關資料所儲存的資料庫名稱.$conf["dbName"]=$dbName;#可省略參數:#$conf["dbPassword"],字串,要連線到資料庫時所用的密碼.#$conf["dbPassword"]=$dbPassword;#$conf["questionnaireType.dtName"],字串,問卷資訊儲存在哪個資料表,預設為"questionnaireType".#$conf["questionnaireType.dtName"]="questionnaireType";#$conf["questionnaireType.typeNoColumnName"],字串,問卷編號的資料欄位名稱,預設為"typeNo".#$conf["questionnaireType.typeNoColumnName"]="typeNo";#$conf["questionnaireType.questionnaireTitleColumnName"],字串,問卷標題的資料欄位名稱,預設為"title".#$conf["questionnaireType.questionnaireTitleColumnName"]="title";#$conf["questionnaireType.pointsColumnName"],字串,問卷量表的資料欄位名稱,預設為"points".#$conf["questionnaireType.pointsColumnName"]="points";#$conf["questionnaireQuest.dtName"],字串,儲存問卷題項資料的資料表名稱#$conf["questionnaireQuest.dtName"]="questionnaireQuest";#$conf["questionnaireQuest.typeNoColumnName"],字串,問卷編號的資料欄位名稱,預設為"typeNo".#$conf["questionnaireQuest.typeNoColumnName"]="typeNo";#$conf["questionnaireQuest.questNoColumnName"],字串,題號資料欄位名稱,預設為"questNo".#$conf["questionnaireQuest.questNoColumnName"]="questNo";#$conf["questionnaireQuest.questTypeCodeColumnName"],字串,題型的資料欄位名稱,預設為"questTypeCode".#$conf["questionnaireQuest.questTypeCodeColumnName"]="questTypeCode";#$conf["questionnaireQuest.selectedQuestOptionMaxCountColumnName"],字串,題目選項的選擇上限的資料欄位名稱,預設為"selectedQuestOptionMaxCount".#$conf["questionnaireQuest.selectedQuestOptionMaxCountColumnName"]="selectedQuestOptionMaxCount";#$conf["questionnaireQuest.questContentColumnName"],字串,題目內容的資料欄位名稱,預設為"questContent".#$conf["questionnaireQuest.questContentColumnName"]="questContent";#$conf["questionnaireQuest.choiceValueColumnName"],字串,題目選項的資料欄位名稱,預設為"choiceValue".#$conf["questionnaireQuest.choiceValueColumnName"]="choiceValue";#$conf["questionnaireQuest.maxLengthColumnName"],字串,題目回答內容的最大長度限制的資料欄位名稱,預設為"maxLength".#$conf["questionnaireQuest.maxLengthColumnName"]="maxLength";#$conf["questionnaireQuest.nullColumnName"],字串,題目是否可以忽略的資料欄位名稱,預設為"null".#$conf["questionnaireQuest.nullColumnName"]="null";#$conf["questionnaireQuest.perspectiveColumnName"],字串,題目所屬構面的資料欄位名稱,預設為"perspective".#$conf["questionnaireQuest.perspectiveColumnName"]="perspective";#$conf["questionnaireQuest.indicatorColumnName"],字串,題目對應的指標的資料欄位名稱,預設為"indicator".#$conf["questionnaireQuest.indicatorColumnName"]="indicator";#$conf["importedQuestionnaireSample.dtName"],字串,問卷樣本的資料表名稱,預設為"questionnaireSample".#$conf["importedQuestionnaireSample.dtName"]="questionnaireSample";#$conf["importedQuestionnaireSample.questionnaireTypeColumnName"],字串,問卷樣本的問卷編號資料欄位名稱,預設為"typeNo".#$conf["importedQuestionnaireSample.questionnaireTypeColumnName"]="typeNo";#$conf["importedQuestionnaireSample.noColumnName"],字串,問卷樣本的編號資料欄位名稱,預設為"guestNo".#$conf["importedQuestionnaireSample.noColumnName"]="guestNo";#$conf["importedQuestionnaireSample.questNoColumnName"],字串,問卷樣本的題號資料欄位名稱,預設為"questNo".#$conf["importedQuestionnaireSample.questNoColumnName"]="questNo";#$conf["importedQuestionnaireSample.answerColumnName"],字串,問卷樣本的答題選項與內容資料欄位名稱,預設為"questAnsSelet".#$conf["importedQuestionnaireSample.answerColumnName"]="questAnsSelet";#$conf["importedQuestionnaireSample.filledColumnName"],字串,問卷樣本題項是否有填寫的資料欄位名稱,預設為"filled".#$conf["importedQuestionnaireSample.filledColumnName"]="filled";#$conf["importedQuestionnaireSample.startSurveyPointDtName"],字串,儲存樣本調查時間點的資料表名稱#$conf["importedQuestionnaireSample.startSurveyPointDtName"]="startSurveyTimePoint";#$conf["importedQuestionnaireSample.recordedYearColumnName"],字串,問卷樣本開始記錄的西元年份欄位名稱.#$conf["importedQuestionnaireSample.recordedYearColumnName"]="recordedYear";#$conf["importedQuestionnaireSample.recordedMonthColumnName"],字串,問卷樣本開始記錄的月份欄位名稱.#$conf["importedQuestionnaireSample.recordedMonthColumnName"]="recordedMonth";#$conf["importedQuestionnaireSample.recordedDayColumnName"],字串,問卷樣本開始記錄的日欄位名稱.#$conf["importedQuestionnaireSample.recordedDayColumnName"]="recordedDay";#$conf["importedQuestionnaireSample.recordedWeekColumnName"],字串,問卷樣本開始紀錄的周欄位名稱;#$conf["importedQuestionnaireSample.recordedWeekColumnName"]="recordedWeek";#$conf["importedQuestionnaireSample.recordedHourColumnName"],字串,問卷樣本開始記錄的小時欄位名稱.#$conf["importedQuestionnaireSample.recordedHourColumnName"]="recordedHour";#$conf["importedQuestionnaireSample.recordedMinColumnName"],字串,問卷樣本開始記錄的分鐘欄位名稱.#$conf["importedQuestionnaireSample.recordedMinColumnName"]="recordedMin";#$conf["importedQuestionnaireSample.recordedSecColumnName"],字串,問卷樣本開始記錄的秒數欄位名稱.#$conf["importedQuestionnaireSample.recordedSecColumnName"]="recordedSec";#參考資料:#無.#備註:#需要測試,由於案例特殊,因此最後再測試。第一題的填達內容無法匯入。*/public static function importQuestionnaireSampleFileWithValidation(&$conf){#初始話要回傳的變數$result=array();#記錄當前執行的函數$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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("questionnaireSamplePath","questionnaireSetupCsvPath","dbAddress","dbName","dbAccount");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string","string","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#設定參數預設值#函式說明:#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。#回傳結果:#$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("",);$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.dtName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.typeNoColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.questionnaireTitleColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.pointsColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.dtName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.typeNoColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.questNoColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.questTypeCodeColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.selectedQuestOptionMaxCountColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.questContentColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.choiceValueColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.maxLengthColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.nullColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.perspectiveColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.indicatorColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.dtName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.questionnaireTypeColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.noColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.questNoColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.answerColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.filledColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.startSurveyPointDtName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedYearColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedMonthColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedDayColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedWeekColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedHourColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedMinColumnName";$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"][]="importedQuestionnaireSample.recordedSecColumnName";#$conf["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?#$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("",);$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"][]="string";#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).$argu=&$conf;#可省略參數:#$conf["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array("",);$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questionnaireType";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="typeNo";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="title";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="points";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questionnaireQuest";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="typeNo";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questNo";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questTypeCode";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="selectedQuestOptionMaxCount";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questContent";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="choiceValue";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="maxLength";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="null";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="perspective";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="indicator";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questionnaireSample";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="typeNo";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="guestNo";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questNo";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="questAnsSelet";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="filled";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="startSurveyTimePoint";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedYear";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedMonth";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedDay";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedWeek";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedHour";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedMin";$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"][]="recordedSec";$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);unset($conf["variableCheck.checkSkipableVarType"]);#如果 $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#var_dump($conf);#讀取問卷樣本csv檔#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["questionnaireSamplePath"];#csv檔案的位置#可省略參數:#$conf["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$sampleCsvFile=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果 $sampleCsvFile["status"] 等於 "false"if($sampleCsvFile["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$sampleCsvFile;#回傳結果return $result;}#if end#debug#var_dump($sampleCsvFile["csvFileContent"][3]);#讀取問卷設定檔#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["questionnaireSetupCsvPath"];#csv檔案的位置#可省略參數:#$conf["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$setupCsvFile=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果 $setupCsvFile["status"] 等於 "false"if($setupCsvFile["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$setupCsvFile;#回傳結果return $result;}#if end#函數說明:#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.#回傳結果:#$result["status"],執行是否正常,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["sec"],整數,要延長多少執行時間,單位爲秒$conf["config::delayRunTimeExectionMax"]["sec"]=300;#參考資料:#http://php.net/manual/en/function.set-time-limit.php$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);unset($conf["config::delayRunTimeExectionMax"]);#如果執行失敗if($delayRunTimeExectionMax["status"]==="false"){#設定類別圖繪製失敗$result["status"]="false";#設定該檔案的類別圖繪製失敗提示$result["error"]=$delayRunTimeExectionMax;#回傳結果return $result;}#if end#透過問卷設定檔 $setupCsvFile 來檢查目標問卷是否存在#取得問卷標題$questionnaireTitle=$setupCsvFile["csvFileContent"][0][0];#檢查問卷系統現有的問卷列表是否有跟 $questionnaireTitle 一樣的名稱#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireType.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireType.questionnaireTitleColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTitle);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#var_dump($checkResult);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="要匯入樣本的目標問卷「".$questionnaireTitle."」並不存在";#回傳結果return $result;}#if end#執行到這代表目標問卷存在#透過對應到的問卷標題取得該問卷的編號#涵式說明:#一次取得資料庫、表的資料#回傳的結果#$result["status"],執行結果"true"為成功;"false"為執行失敗。#$result["error"],錯誤訊息陣列。#$result["dataColumnName"],抓取的資料欄位名稱陣列.#$result["dataColumnName"][$i]代表第$i+1個欄位名稱#$result["dataContent"],爲資料的內容。#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]#$dataSetNum 爲第$dataSetNum+1筆資料#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱#$result["dataCount"],爲取得的資料筆數。#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"];#爲要存取的資料庫名稱$conf["db"]["fastGetDbData"]["tableName"]=$conf["questionnaireType.dtName"];#爲要存取的資料表名稱$conf["db"]["fastGetDbData"]["columnYouWant"]=array($conf["questionnaireType.typeNoColumnName"]);#你想要的欄位!,若設為「array("*")」則代表全部欄位.#可省略參數:#如果 $conf["dbPassword"] 有設置if(isset($conf["dbPassword"])){$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼}#if end$conf["db"]["fastGetDbData"]["WhereColumnName"]=array($conf["questionnaireType.questionnaireTitleColumnName"]);#用於判斷語句的欄位項目陣列。$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($questionnaireTitle);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。$getQuestionnaireTypeNoResult=db::fastGetDbData($conf["db"]["fastGetDbData"]);unset($conf["db"]["fastGetDbData"]);#如果 $getQuestionnaireTypeNoResult["status"] 等於 "false"if($getQuestionnaireTypeNoResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getQuestionnaireTypeNoResult;#回傳結果return $result;}#if end#如果 $getQuestionnaireTypeNoResult["dataCount"] 等於 0if($getQuestionnaireTypeNoResult["dataCount"]==0){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="找不到目標問卷的編號";#回傳結果return $result;}#if end#轉存目標問卷的編號$questionnaireTypeNo=$getQuestionnaireTypeNoResult["dataContent"][$conf["questionnaireType.typeNoColumnName"]][0];#將問卷樣本檔 $sampleCsvFile 匯入資料表#初始化儲存樣本檔裡面哪幾題可匯入為樣本$importableQuestNumArrayInSamples=array();#初始化儲存問卷設定檔題目對應的資料庫題號陣列變數$questNumberArrayInDb=array();#檢查問卷設定檔與資料庫裡的問卷資訊是否相符#檢查該題的題目對應到資料庫是否存在#有幾題就執行幾次for($i=4;$i<count($setupCsvFile["csvFileContent"]);$i++){#檢查該題的題目是否存在於資料庫#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questContentColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$setupCsvFile["csvFileContent"][$i][0]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」並不存在";#跳過該次迴圈continue;}#if end#執行到這邊代表有對應到題目內容#透過題目內容來找對應的題號#涵式說明:#一次取得資料庫、表的資料#回傳的結果#$result["status"],執行結果"true"為成功;"false"為執行失敗。#$result["error"],錯誤訊息陣列。#$result["dataColumnName"],抓取的資料欄位名稱陣列.#$result["dataColumnName"][$i]代表第$i+1個欄位名稱#$result["dataContent"],爲資料的內容。#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]#$dataSetNum 爲第$dataSetNum+1筆資料#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱#$result["dataCount"],爲取得的資料筆數。#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。$conf["db"]["fastGetDbData"]["dbName"]=$conf["dbName"];#爲要存取的資料庫名稱$conf["db"]["fastGetDbData"]["tableName"]=$conf["questionnaireQuest.dtName"];#爲要存取的資料表名稱$conf["db"]["fastGetDbData"]["columnYouWant"]=array($conf["questionnaireQuest.questNoColumnName"]);#你想要的欄位!,若設為「array("*")」則代表全部欄位.#可省略參數:#如果 $conf["dbPassword"] 有設置if(isset($conf["dbPassword"])){$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼}#if end$conf["db"]["fastGetDbData"]["WhereColumnName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questContentColumnName"]);#用於判斷語句的欄位項目陣列。$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($questionnaireTypeNo,$setupCsvFile["csvFileContent"][$i][0]);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。$getQuestNo=db::fastGetDbData($conf["db"]["fastGetDbData"]);unset($conf["db"]["fastGetDbData"]);#如果 $getQuestNo["status"] 等於 "false"if($getQuestNo["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getQuestNo;#回傳結果return $result;}#if end#如果 $getQuestNo["dataCount"] 等於 0if($getQuestNo["dataCount"]==0){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="該題「".$setupCsvFile["csvFileContent"][$i][0]."」找不到對應的題號";#跳過該次迴圈continue;}#if end#執行到這代表有找到題號$thisQuestNo=$getQuestNo["dataContent"][$conf["questionnaireQuest.questNoColumnName"]][0];#根據問卷編號、問題題號去檢查設定檔提供該題的題型是否正確#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questNoColumnName"],$conf["questionnaireQuest.questTypeCodeColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$thisQuestNo,$setupCsvFile["csvFileContent"][$i][1]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」,其題型不應該為「".$setupCsvFile["csvFileContent"][$i][1]."」";#跳過該次迴圈continue;}#if end#執行到這邊代表問卷資訊檔的題型跟資料庫資料相符#檢查問題對應的填答選項上限是否正確#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questNoColumnName"],$conf["questionnaireQuest.selectedQuestOptionMaxCountColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$thisQuestNo,$setupCsvFile["csvFileContent"][$i][2]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」,其填答選項上限不應該為「".$setupCsvFile["csvFileContent"][$i][2]."」";#跳過該次迴圈continue;}#if end#執行到這邊代表問卷資訊檔的題目回答選項上限跟資料庫相符#檢查該題的選項內容是否對應正確#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questNoColumnName"],$conf["questionnaireQuest.choiceValueColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$thisQuestNo,$setupCsvFile["csvFileContent"][$i][3]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#var_dump($checkResult);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」,其選項內容不應該為「".$setupCsvFile["csvFileContent"][$i][3]."」,系統已自動修正!";#各版本問題的題項內容要相同太困難#跳過該次迴圈#continue;}#if end#執行到這邊代表問卷資訊檔的題目選項跟資料庫相符#檢查該題是否必填的設定是否正確#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questNoColumnName"],$conf["questionnaireQuest.nullColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$thisQuestNo,$setupCsvFile["csvFileContent"][$i][4]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」,其是否必填的設定不應該為「".$setupCsvFile["csvFileContent"][$i][4]."」";#跳過該次迴圈continue;}#if end#執行到這邊代表問卷設定檔是否必填的設定跟資料庫相符#檢查題目對應的構面是否相符#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questNoColumnName"],$conf["questionnaireQuest.perspectiveColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$thisQuestNo,$setupCsvFile["csvFileContent"][$i][5]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」,其歸屬的構面不應該為「".$setupCsvFile["csvFileContent"][$i][5]."」";#跳過該次迴圈continue;}#if end#執行到這邊代表問卷資訊檔的構面設定跟資料庫相符#檢查題目對應的指標是否相符#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["questionnaireQuest.dtName"];#欲選擇的資料表名稱#可省略參數:#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$conf["db"]["checkDataExists"]["conditionTargetName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questNoColumnName"],$conf["questionnaireQuest.indicatorColumnName"]);#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireTypeNo,$thisQuestNo,$setupCsvFile["csvFileContent"][$i][6]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkResult=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["founded"] 等於 "false"if($checkResult["founded"]=="false"){#設置錯誤識別$result["status"]="false";#設置警示訊息$result["warning"][]="樣本對應的問題「".$setupCsvFile["csvFileContent"][$i][0]."」,其對應的指標不應該為「".$setupCsvFile["csvFileContent"][$i][6]."」";#跳過該次迴圈continue;}#if end#執行到這邊代表問卷設定的檔指標設定與資料庫相符#取得題目對應的題號,儲存的key為從0開始的整數,題目內容也是key.$questNumberArrayInDb[$i-4]=$thisQuestNo;$questNumberArrayInDb[$setupCsvFile["csvFileContent"][$i][0]]=$thisQuestNo;#儲存可以匯入到樣本資料庫的題號(從0開始)$importableQuestNumArrayInSamples[]=$i-4;#初始$j為7$j=7;#檢查題目預測的KRI題項是否相符#無窮迴圈while(true){#如果 $setupCsvFile["csvFileContent"][$i][$j] 有設定if(isset($setupCsvFile["csvFileContent"][$i][$j])){#如果 $setupCsvFile["csvFileContent"][$i][$j] 不為空if($setupCsvFile["csvFileContent"][$i][$j]!=""){#尋找該題的題號#涵式說明:#一次取得資料庫、表的資料#回傳的結果#$result["status"],執行結果"true"為成功;"false"為執行失敗。#$result["error"],錯誤訊息陣列。#$result["dataColumnName"],抓取的資料欄位名稱陣列.#$result["dataColumnName"][$i]代表第$i+1個欄位名稱#$result["dataContent"],爲資料的內容。#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]#$dataSetNum 爲第$dataSetNum+1筆資料#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱#$result["dataCount"],爲取得的資料筆數。#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。$conf["db"]["fastGetDbData"]["dbName"]=$dbName;#爲要存取的資料庫名稱$conf["db"]["fastGetDbData"]["tableName"]=$conf["questionnaireQuest.dtName"];#爲要存取的資料表名稱$conf["db"]["fastGetDbData"]["columnYouWant"]=array($conf["questionnaireQuest.questNoColumnName"]);#你想要的欄位!,若設為「array("*")」則代表全部欄位.#可省略參數:$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼$conf["db"]["fastGetDbData"]["WhereColumnName"]=array($conf["questionnaireQuest.typeNoColumnName"],$conf["questionnaireQuest.questContentColumnName"]);#用於判斷語句的欄位項目陣列。$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($questionnaireTypeNo,$setupCsvFile["csvFileContent"][$i][$j]);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。$getQuestNoResult=db::fastGetDbData($conf["db"]["fastGetDbData"]);unset($conf["db"]["fastGetDbData"]);#如果 $getQuestNoResult["status"] 等於 "false"if($getQuestNoResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#取得是在哪個函式發現錯誤的$result["functionName"]=__FUNCTION__;#設置錯誤訊息$result["error"]=$getQuestNoResult;#回傳結果return $result;}#if end#往後尋找$j++;#如果 $getQuestNoResult["dataCount"] 為 0if($getQuestNoResult["dataCount"]==0){#設置警告訊息$result["warning"][]="找不名為".$csvFileContent["csvFileContent"][i][0]."的題項";#代表沒有該題目#跳出whilebreak;}#if end}#if end#反之代表沒有預測指標的資料else{#跳出whilebreak;}#else end}#if end#反之代表沒有預測指標的資料else{#跳出whilebreak;}#else end}#while end}#for end#取得題目對應的題號,儲存的key為從0開始的整數,題目內容也是key.#var_dump(count($questNumberArrayInDb));#儲存可以匯入到樣本資料庫的樣本檔題號#var_dump(count($importableQuestNumArrayInSamples));#函數說明:#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.#回傳結果:#$result["status"],執行是否正常,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["sec"],整數,要延長多少執行時間,單位爲秒$conf["config::delayRunTimeExectionMax"]["sec"]=300;#參考資料:#http://php.net/manual/en/function.set-time-limit.php$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);unset($conf["config::delayRunTimeExectionMax"]);#如果執行失敗if($delayRunTimeExectionMax["status"]==="false"){#設定類別圖繪製失敗$result["status"]="false";#設定該檔案的類別圖繪製失敗提示$result["error"]=$delayRunTimeExectionMax;#回傳結果return $result;}#if end#依據每筆樣本(剔除標題攔)for($i=1;$i<$sampleCsvFile["lineArrayCount"];$i++){#初始化該樣本尚未插入調查的時間點#"false"代表該樣本尚未插入調查的時間點$insertedStartSurveyPointStatus="false";#依據每一題(該行的每一欄)#-7是因為有年月日周時分秒的欄位for($j=1;$j<count($sampleCsvFile["csvFileContent"][$i])-7;$j++){#題目對應的題號,儲存的key為從0開始的整數,題目內容也是key.#$questNumberArrayInDb#問卷設定檔題目對應的資料庫題號陣列變數#$importableQuestNumArrayInSamples#檢查該題是否為可以匯入的題項#涵式說明:#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.#回傳的結果:#$result["status"],"true"表示執行正確,"false"表示執行錯誤.#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.#$result["error"],錯誤訊息#$result["equalVarName"],相等的變數名稱或key.#$result["equalVarValue"],相等的變數數值內容.#必填參數:$conf["search.getEqualVar"]["conditionElement"]=$j-1;#條件元素,要等於的元素內容.$conf["search.getEqualVar"]["compareElements"]=$importableQuestNumArrayInSamples;#要比對的陣列變數內容.$searchResult=search::getEqualVar($conf["search.getEqualVar"]);unset($conf["search.getEqualVar"]);#var_dump($searchResult);#如果搜尋出錯if($searchResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$searchResult;#回傳結果return $result;}#if end#初始化儲存該題對應在資料庫裡面的題號$questNoInDb="";#如果沒有找到對應的題項if($searchResult["founded"]=="false"){#跳過該題continue;}#if end#反之代表有找到對應的題項else{#取得該題在資料庫裡面的題號為何$questNoInDb=$questNumberArrayInDb[$searchResult["equalVarValue"]];}#else end#寫入該題填寫的內容#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["status"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了.#$result["error"],錯誤訊息.#$result["sql"],執行的sql語法.#必填參數:$conf["db"]["insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["insertData"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱$conf["db"]["insertData"]["tableName"]=$conf["importedQuestionnaireSample.dtName"];#爲要插入資料的資料表名稱$conf["db"]["insertData"]["columnName"]=array($conf["questionnaireType.typeNoColumnName"],$conf["importedQuestionnaireSample.noColumnName"],$conf["importedQuestionnaireSample.questNoColumnName"],$conf["importedQuestionnaireSample.answerColumnName"],$conf["importedQuestionnaireSample.filledColumnName"]);#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);#初始化記錄該題是否有填寫的變數$filled="";#如果填答內容不存在if(!isset($sampleCsvFile["csvFileContent"][$i][$j])){#則代表該題未填寫$filled="false";}#if end#不滿足以上條件,但如果填答內容為""else if($sampleCsvFile["csvFileContent"][$i][$j]==""){#則代表該題未填寫$filled="false";}#if end#不滿足以上條件,代表該題有填寫else{$filled="true";}#else end#取得題號$thisQuestNo=$j;#取得填寫的內容字串$filledContent=$sampleCsvFile["csvFileContent"][$i][$thisQuestNo];$conf["db"]["insertData"]["insertValue"]=array($questionnaireTypeNo,$sampleCsvFile["csvFileContent"][$i][0],$questNoInDb,$filledContent,$filled);#爲要插入的數值#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);#可以省略的變數:#如果 $conf["dbPassword"] 有設置if(isset($conf["dbPassword"])){#則用密碼來連線$conf["db"]["insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end$fillQuestResult=db::insertData($conf["db"]["insertData"]);unset($conf["db"]["insertData"]);#debug#var_dump($fillQuestResult);#移除題號內容,避免寫入重複的題號.unset($thisQuestNo);#如果 $fillQuestResult["status"] 等於 "false"if($fillQuestResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$fillQuestResult;#回傳結果return $result;}#if end#檢查有無插入過該筆樣本的調查時間點#"false"代表該樣本尚未插入調查的時間點if($insertedStartSurveyPointStatus=="false"){#插入接受調查的時間#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.#$result["error"],錯誤訊息.#$result["sql"],執行的sql語法.#必填參數:$conf["db.insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db.insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db.insertData"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱$conf["db.insertData"]["tableName"]=$conf["importedQuestionnaireSample.startSurveyPointDtName"];#爲要插入資料的資料表名稱#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);$conf["db.insertData"]["columnName"][]=$conf["questionnaireType.typeNoColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.noColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedYearColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedMonthColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedDayColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedWeekColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedHourColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedMinColumnName"];$conf["db.insertData"]["columnName"][]=$conf["importedQuestionnaireSample.recordedSecColumnName"];#爲要插入度數值,#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);$conf["db.insertData"]["insertValue"][]=$questionnaireTypeNo;$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][0];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-7];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-6];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-5];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-4];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-3];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-2];$conf["db.insertData"]["insertValue"][]=$sampleCsvFile["csvFileContent"][$i][count($sampleCsvFile["csvFileContent"][$i])-1];#可以省略的變數:$conf["db.insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$insertStartSurveyPointResult=db::insertData($conf["db.insertData"]);unset($conf["db.insertData"]);#debug#var_dump($insertStartSurveyPointResult);#如果插入調查詩時間失敗if($insertStartSurveyPointResult["status"]=="false"){#設置執行不正常$result["status"]="false";#設置執行的錯誤訊息$result["error"]=$insertStartSurveyPointResult;#回傳結果return $result;}#if end#設置有插入過該筆樣本的開始調查時間$insertedStartSurveyPointStatus="true";}#if end#函數說明:#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.#回傳結果:#$result["status"],執行是否正常,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["sec"],整數,要延長多少執行時間,單位爲秒$conf["config::delayRunTimeExectionMax"]["sec"]=300;#參考資料:#http://php.net/manual/en/function.set-time-limit.php$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);unset($conf["config::delayRunTimeExectionMax"]);#如果執行失敗if($delayRunTimeExectionMax["status"]==="false"){#設定類別圖繪製失敗$result["status"]="false";#設定該檔案的類別圖繪製失敗提示$result["error"]=$delayRunTimeExectionMax;#回傳結果return $result;}#if end}#for end#函數說明:#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.#回傳結果:#$result["status"],執行是否正常,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["sec"],整數,要延長多少執行時間,單位爲秒$conf["config::delayRunTimeExectionMax"]["sec"]=300;#參考資料:#http://php.net/manual/en/function.set-time-limit.php$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);unset($conf["config::delayRunTimeExectionMax"]);#如果執行失敗if($delayRunTimeExectionMax["status"]==="false"){#設定類別圖繪製失敗$result["status"]="false";#設定該檔案的類別圖繪製失敗提示$result["error"]=$delayRunTimeExectionMax;#回傳結果return $result;}#if end}#for end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function convertSampleToValidatedAddVersion end/*#函式說明:#依據問卷資訊csv格式檔匯入問卷#回傳結果:#$result["status"],執行是否正確,"true"代表正確,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],在哪個函式出現錯誤的#$result["warning"].警告訊息陣列#必填參數:#$conf["questionnaireSetupCsvPath"],字串,記錄問卷資訊的csv檔案.$conf["questionnaireSetupCsvPath"]="";#$conf["dbAddress"],字串,問卷資料庫的網路位址.$conf["dbAddress"]=$dbAddress;#$conf["dbAccount"],字串,要連線到資料庫時所用的帳戶名稱.$conf["dbAccount"]=$dbAccount;#$conf["dbName"],字串,問卷相關資料所儲存的資料庫名稱.$conf["dbName"]=$dbName;#$argu,變數,參數陣列的名稱,記得前面要加&.$argu=&$conf;#可省略參數:#$conf["dbPassword"],字串,要連線到資料庫時所用的密碼.#$conf["dbPassword"]=$dbPassword;#$conf["delFileAfterImport"],字串,若為"true"則代表要在匯入檔案完畢後,移除csv檔案。#$conf["delFileAfterImport"]="true";#$conf["questionnaireType.dtName"],字串,問卷資訊儲存在哪個資料表,預設為"questionnaireType".#$conf["questionnaireType.dtName"]="questionnaireType";#$conf["questionnaireType.typeNoColumnName"],字串,問卷編號的資料欄位名稱,預設為"typeNo".#$conf["questionnaireType.typeNoColumnName"]="typeNo";#$conf["questionnaireType.questionnaireTitleColumnName"],字串,問卷標題的資料欄位名稱,預設為"title".#$conf["questionnaireType.questionnaireTitleColumnName"]="title";#$conf["questionnaireType.questionnaireCommentColumnName"],字串,問卷註解的資料欄位名稱,預設為"comments".#$conf["questionnaireType.questionnaireCommentColumnName"]="comments";#$conf["questionnaireType.pointsColumnName"],字串,問卷量表的資料欄位名稱,預設為"points".#$conf["questionnaireType.pointsColumnName"]="points";#$conf["questionnaireType.startSurveyColumnName"],字串,問卷是否開始調查的資料欄位,預設為"startSurvey".#$conf["questionnaireType.startSurveyColumnName"]="startSurvey";#$conf["questionnaireTurnaroundTime.dtName"],字串,問卷查週期與期間的資料表名稱,預設為"questionnaireTurnaroundTime".#$conf["questionnaireTurnaroundTime.dtName"]="questionnaireTurnaroundTime";#$conf["questionnaireTurnaroundTime.turnaroundTimeColumnName"],字串,問卷調查週期的資料表欄位名稱,預設為"turnaroundTimeByDays".#$conf["questionnaireTurnaroundTime.turnaroundTimeColumnName"]="turnaroundTime";#$conf["questionnaireTurnaroundTime.durationTimeColumnName"],字串,問卷調查期間的資料表欄位名稱.#$conf["questionnaireTurnaroundTime.durationTimeColumnName"]="durationByDays";#$conf["questionnaireQuest.dtName"],字串,儲存問卷題項資料的資料表名稱#$conf["questionnaireQuest.dtName"]="questionnaireQuest";#$conf["questionnaireQuest.typeNoColumnName"],字串,問卷編號的資料欄位名稱,預設為"typeNo".#$conf["questionnaireQuest.typeNoColumnName"]="typeNo";#$conf["questionnaireQuest.questNoColumnName"],字串,題號資料欄位名稱,預設為"questNo".#$conf["questionnaireQuest.questNoColumnName"]="questNo";#$conf["questionnaireQuest.questTypeCodeColumnName"],字串,題型的資料欄位名稱,預設為"questTypeCode".#$conf["questionnaireQuest.questTypeCodeColumnName"]="questTypeCode";#$conf["questionnaireQuest.selectedQuestOptionMaxCountColumnName"],字串,題目選項的選擇上限的資料欄位名稱,預設為"selectedQuestOptionMaxCount".#$conf["questionnaireQuest.selectedQuestOptionMaxCountColumnName"]="selectedQuestOptionMaxCount";#$conf["questionnaireQuest.questContentColumnName"],字串,題目內容的資料欄位名稱,預設為"questContent".#$conf["questionnaireQuest.questContentColumnName"]="questContent";#$conf["questionnaireQuest.choiceValueColumnName"],字串,題目選項的資料欄位名稱,預設為"choiceValue".#$conf["questionnaireQuest.choiceValueColumnName"]="choiceValue";#$conf["questionnaireQuest.maxLengthColumnName"],字串,題目回答內容的最大長度限制的資料欄位名稱,預設為"maxLength".#$conf["questionnaireQuest.maxLengthColumnName"]="maxLength";#$conf["questionnaireQuest.nullColumnName"],字串,題目是否可以忽略的資料欄位名稱,預設為"null".#$conf["questionnaireQuest.nullColumnName"]="null";#$conf["questionnaireQuest.perspectiveColumnName"],字串,題目所屬構面的資料欄位名稱,預設為"perspective".#$conf["questionnaireQuest.perspectiveColumnName"]="perspective";#$conf["questionnaireQuest.indicatorColumnName"],字串,題目對應的指標的資料欄位名稱,預設為"indicator".#$conf["questionnaireQuest.indicatorColumnName"]="indicator";#參考資料:#無.#備註:#需要測試.須增加建立於特定時間自動執行問卷樣本ETL程序的程式*/public static function importQuestionnaire($conf,&$argu){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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("questionnaireSetupCsvPath","dbAddress","dbAccount","dbName");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck"]["isexistMulti"]["variableType"]=array("string","string","string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["variableCheck"]["isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMulti"]);unset($conf["variableCheck"]);#如果 $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#檢查可省略的參數#函式說明:#檢查一包含數個可省略變數的陣列變數,其型態是否正確#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查.#必填參數:#$conf["variableCheck"]["checkSkipableVarType"]["checkedVar"],陣列,要檢查的變數陣列名稱為?$conf["variableCheck"]["checkSkipableVarType"]["checkedVar"]=$conf;#$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="dbPassword";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="delFileAfterImport";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.dtName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.typeNoColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.questionnaireTitleColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.questionnaireCommentColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.pointsColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireType.startSurveyColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireTurnaroundTime.dtName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireTurnaroundTime.turnaroundTimeColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireTurnaroundTime.durationTimeColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.dtName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.typeNoColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.questNoColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.questTypeCodeColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.selectedQuestOptionMaxCountColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.questContentColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.choiceValueColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.maxLengthColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.nullColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.perspectiveColumnName";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarNameArray"][]="questionnaireQuest.indicatorColumnName";#$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";$conf["variableCheck"]["checkSkipableVarType"]["sikpableVarTypeArray"][]="string";#$argu,要直接存取的陣列變數名稱,變數前面加上「&」.#$argu=&$argu;#可省略參數:#$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="null";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="null";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="questionnaireType";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="typeNo";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="title";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="comments";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="points";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="startSurvey";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="questionnaireTurnaroundTime";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="turnaroundTime";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="durationByDays";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="questionnaireQuest";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="typeNo";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="questNo";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="questTypeCode";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="selectedQuestOptionMaxCount";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="questContent";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="choiceValue";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="maxLength";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="null";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="perspective";$conf["variableCheck"]["checkSkipableVarType"]["skipableVarDefaultValue"][]="indicator";$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck"]["checkSkipableVarType"],$argu);unset($conf["variableCheck"]);#置換$conf為更新好的$argu$conf=$argu;#如果 $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#讀取檔案的內容#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["questionnaireSetupCsvPath"];#csv檔案的位置#可省略參數:#$conf["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$csvFileContent=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]);#如果讀取csv檔案失敗if($csvFileContent["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$csvFileContent;#回傳結果return $result;}#if end#var_dump($csvFileContent);#搜尋可用的問卷編號#涵式說明:#尋找特定資料庫裏特定資料表裏面特定欄位有無可用整數編號,可以指定數字的起點與終點,此函式會回傳可用的編號。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數.#$result["founded"],爲搜尋可以用的數字是否成功,"true"表示成功,"false"表示失敗.#$result["usableNumber"],爲可用的整數。#$result["sql"],執行的sql語法.#必填參數$conf["db"]["findUsableNumber"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["findUsableNumber"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["findUsableNumber"]["selectedDataBaseName"]=$conf["dbName"];#爲要檢查的資料庫名稱$conf["db"]["findUsableNumber"]["checkDataTableName"]=$conf["questionnaireType.dtName"];#爲要檢查的資料表名稱$conf["db"]["findUsableNumber"]["conditionTargetName"]=$conf["questionnaireType.typeNoColumnName"];#用來判斷的資料表數值名稱$conf["db"]["findUsableNumber"]["startPoint"]="1";#要執行的迴圈起點(資料的起始檢查點),須爲int$conf["db"]["findUsableNumber"]["endPoint"]="99999";#要執行的迴圈終點(資料的結束檢查點),須爲int#可省略參數#如果 $conf["dbPassword"] 有設定if(isset($conf["dbPassword"])){#設置連線用的密碼$conf["db"]["findUsableNumber"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼}#if end#$conf["otherConditionTargetName"]=array();#查詢欄位項目可用數值的其它條件欄位名稱,爲陣列值。#須搭配 $conf["otherConditionTargetValue"] 一起使用#$conf["otherConditionTargetValue"]=array();#查詢欄位項目可用數值的其它條件欄位數值,爲陣列值。#須搭配 $conf["otherConditionTargetName"] 一起使用$questionnaireType=db::findUsableNumber($conf["db"]["findUsableNumber"]);unset($conf["db"]["findUsableNumber"]);#如果取得可用問卷編號失敗if($questionnaireType["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$questionnaireType;#回傳結果return $result;}#if end#如果沒有可用的問卷編號if($questionnaireType["founded"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$questionnaireType;#回傳結果return $result;}#if end#根據問卷名稱、描述、幾點量表來建立問卷#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["connectInformation"],爲連線到該mysql-server的資訊。#$result["connectStatus"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了#$result["error"],錯誤訊息#必填參數:$conf["db"]["insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["insertData"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱$conf["db"]["insertData"]["tableName"]=$conf["questionnaireType.dtName"];#爲要插入資料的資料表名稱#串連需要寫入的問卷欄位#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);$conf["db"]["insertData"]["columnName"][]=$conf["questionnaireType.typeNoColumnName"];$conf["db"]["insertData"]["columnName"][]=$conf["questionnaireType.questionnaireTitleColumnName"];$conf["db"]["insertData"]["columnName"][]=$conf["questionnaireType.questionnaireCommentColumnName"];$conf["db"]["insertData"]["columnName"][]=$conf["questionnaireType.pointsColumnName"];$conf["db"]["insertData"]["columnName"][]=$conf["questionnaireType.startSurveyColumnName"];#爲要插入度數值#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);#$conf["db"]["insertData"]["insertValue"]=array(,,,);$conf["db"]["insertData"]["insertValue"][]=$questionnaireType["usableNumber"];$conf["db"]["insertData"]["insertValue"][]=$csvFileContent["csvFileContent"][0][0];$conf["db"]["insertData"]["insertValue"][]=$csvFileContent["csvFileContent"][0][1];$conf["db"]["insertData"]["insertValue"][]=$csvFileContent["csvFileContent"][0][2];$conf["db"]["insertData"]["insertValue"][]=$csvFileContent["csvFileContent"][0][7];#可以省略的變數:$conf["db"]["insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$insertQuesttionaireBasicDataResult=db::insertData($conf["db"]["insertData"]);unset($conf["db"]["insertData"]);#如果 $insertQuesttionaireBasicDataResult["status"] 等於 "false"if($insertQuesttionaireBasicDataResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$insertQuesttionaireBasicDataResult;#回傳結果return $result;}#if end#根據問卷調查週期來補充資料#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.#$result["error"],錯誤訊息.#$result["sql"],執行的sql語法.#必填參數:$conf["db"]["insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["insertData"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱$conf["db"]["insertData"]["tableName"]=$conf["questionnaireTurnaroundTime.dtName"];#爲要插入資料的資料表名稱#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);$conf["db"]["insertData"]["columnName"]=array("questionnaireTypeNo","turnaroundTime","durationByDays","startNumberOfMonth","startNumberOfDay");$conf["db"]["insertData"]["insertValue"]=array($questionnaireType["usableNumber"],$csvFileContent["csvFileContent"][0][3],$csvFileContent["csvFileContent"][0][4],$csvFileContent["csvFileContent"][0][5],$csvFileContent["csvFileContent"][0][6]);#爲要插入度數值,#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);#可以省略的變數:$conf["db"]["insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$db["insertData"]=db::insertData($conf["db"]["insertData"]);unset($conf["db"]["insertData"]);#如果 $db["insertData"]["status"] 等於 "false"if($db["insertData"]["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$db["insertData"];#回傳結果return $result;}#if end#有幾個構面就執行幾次for($i=0;$i<count($csvFileContent["csvFileContent"][1]);$i++){#如果讀到的構面是空白的就跳出迴圈if($csvFileContent["csvFileContent"][1][$i]=="" || $csvFileContent["csvFileContent"][1][$i]=="�"){#跳出迴圈break;}#if end#要先檢查目標構面是否已存在,若存在則不用插入該構面.#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]="perspective";#欲選擇的資料表名稱#可省略參數:$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$conf["db"]["checkDataExists"]["conditionTargetName"]=array("name");#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($csvFileContent["csvFileContent"][1][$i]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkDataBaseExists=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#var_dump($checkDataBaseExists);#如果 $checkDataBaseExists["status"] 等於 "false"if($checkDataBaseExists["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkDataBaseExists;#回傳結果return $result;}#if end#如果 $checkDataBaseExists["founded"] 等於 "true"if($checkDataBaseExists["founded"]=="true"){#跳過該次迴圈continue;}#if end#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.#$result["error"],錯誤訊息.#$result["sql"],執行的sql語法.#必填參數:$conf["db"]["insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["insertData"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱$conf["db"]["insertData"]["tableName"]="perspective";#爲要插入資料的資料表名稱$conf["db"]["insertData"]["columnName"]=array("name","description");#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);$conf["db"]["insertData"]["insertValue"]=array($csvFileContent["csvFileContent"][1][$i],$csvFileContent["csvFileContent"][2][$i]);#爲要插入度數值,#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);#可以省略的變數:$conf["db"]["insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$db["insertData"]=db::insertData($conf["db"]["insertData"]);unset($conf["db"]["insertData"]);#如果$db["insertData"]["status"]等於"false"if($db["insertData"]["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$db["insertData"];#回傳結果return $result;}#if end}#for end#根據每個 $csvFileContent["csvFileContent"] 的數量,從 $csvFileContent["csvFileContent"][4] 開始建立每一題的題目、描述、題型、選項、必填或可省略、指標等欄位資料。for($i=4;$i<count($csvFileContent["csvFileContent"]);$i++){#檢查是否有完全相同的題目#函式說明:#檢查資料庫裏的資料表有無指定條件的資料#回傳的結果:#$result["status"],執行是否成功,成功為"true",失敗為"false"。#$result["error"],錯誤訊息#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱$conf["db"]["checkDataExists"]["selectedDataTableName"]="questionnaireQuest";#欲選擇的資料表名稱#可省略參數:$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$conf["db"]["checkDataExists"]["conditionTargetName"]=array("typeNo","questContent","questTypeCode","selectedQuestOptionMaxCount","choiceValue","null","perspective");#用來判斷的資料表數值名稱,需爲陣列,可省略$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($questionnaireType["usableNumber"],$csvFileContent["csvFileContent"][$i][0],$csvFileContent["csvFileContent"][$i][1],$csvFileContent["csvFileContent"][$i][2],$csvFileContent["csvFileContent"][$i][3],$csvFileContent["csvFileContent"][$i][4],$csvFileContent["csvFileContent"][$i][5]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略$checkDataBaseExists=db::checkDataExists($conf["db"]["checkDataExists"]);unset($conf["db"]["checkDataExists"]);#如果 $checkDataBaseExists 等於 "false"if($checkDataBaseExists["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkDataBaseExists;#回傳結果return $result;}#if end#如果 $checkDataBaseExists["founded"] 等於 "true"if($checkDataBaseExists["founded"]=="true"){#跳過該次迴圈continue;}#if end#var_dump($questionnaireType["usableNumber"]);#尋找可用的題號#涵式說明:#尋找特定資料庫裏特定資料表裏面特定欄位有無可用整數編號,可以指定數字的起點與終點,此函式會回傳可用的編號。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["founded"],爲搜尋可以用的數字是否成功,"true"表示成功,"false"表示失敗.#$result["usableNumber"],爲可用的整數。#$result["sql"],執行的sql語法.#必填參數$conf["db"]["findUsableNumber"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["findUsableNumber"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["findUsableNumber"]["selectedDataBaseName"]=$conf["dbName"];#爲要檢查的資料庫名稱$conf["db"]["findUsableNumber"]["checkDataTableName"]="questionnaireQuest";#爲要檢查的資料表名稱$conf["db"]["findUsableNumber"]["conditionTargetName"]="questNo";#用來判斷的資料表數值名稱$conf["db"]["findUsableNumber"]["startPoint"]="1";#要執行的迴圈起點(資料的起始檢查點)$conf["db"]["findUsableNumber"]["endPoint"]="9999";#要執行的迴圈終點(資料的結束檢查點)#可省略參數$conf["db"]["findUsableNumber"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$conf["db"]["findUsableNumber"]["otherConditionTargetName"]=array("typeNo");#查詢欄位項目可用數值的其它條件欄位名稱,爲陣列值。#須搭配 $conf["otherConditionTargetValue"] 一起使用$conf["db"]["findUsableNumber"]["otherConditionTargetValue"]=array($questionnaireType["usableNumber"]);#查詢欄位項目可用數值的其它條件欄位數值,爲陣列值。#須搭配 $conf["otherConditionTargetName"] 一起使用$questFindUsableNumber=db::findUsableNumber($conf["db"]["findUsableNumber"]);unset($conf["db"]["findUsableNumber"]);#如果 $questFindUsableNumber["status"]等於"false"if($questFindUsableNumber["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkDataBaseExists;#回傳結果return $result;}#if endif($questFindUsableNumber["founded"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"][]="儲存題號的資料表其資料筆數已達上限!";#回傳結果return $result;}#if end#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["connectInformation"],爲連線到該mysql-server的資訊。#$result["connectStatus"],爲查詢是否成功,若爲0則成功,若爲1則表示失敗了#$result["error"],錯誤訊息#必填參數:$conf["db"]["insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["insertData"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱$conf["db"]["insertData"]["tableName"]="questionnaireQuest";#爲要插入資料的資料表名稱$conf["db"]["insertData"]["columnName"]=array("typeNo","questNo","questContent","questTypeCode","selectedQuestOptionMaxCount","choiceValue","null","perspective","indicator");#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);$conf["db"]["insertData"]["insertValue"]=array($questionnaireType["usableNumber"],$questFindUsableNumber["usableNumber"],$csvFileContent["csvFileContent"][$i][0],$csvFileContent["csvFileContent"][$i][1],$csvFileContent["csvFileContent"][$i][2],$csvFileContent["csvFileContent"][$i][3],$csvFileContent["csvFileContent"][$i][4],$csvFileContent["csvFileContent"][$i][5],$csvFileContent["csvFileContent"][$i][6]);#爲要插入度數值,#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);#可以省略的變數:$conf["db"]["insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$db["insertData"]=db::insertData($conf["db"]["insertData"]);unset($conf["db"]["insertData"]);#如果 $db["insertData"]["status"] 等於 "false"if($db["insertData"]["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$db["insertData"];#回傳結果return $result;}#if end}#for end#根據每個 $csvFileContent["csvFileContent"] 的數量,從 $csvFileContent["csvFileContent"][4] 開始建立每一KPI題項預測的KRI題項資料。for($i=4;$i<count($csvFileContent["csvFileContent"]);$i++){#設定$j為7$j=7;#然後執行無窮迴圈while(true){#如果 $csvFileContent["csvFileContent"][i][$j] 存在if(isset($csvFileContent["csvFileContent"][$i][$j])){#如果 $csvFileContent["csvFileContent"][i][$j] 不等於 ""if($csvFileContent["csvFileContent"][$i][$j]!=""){#尋找該題的題號#涵式說明:#一次取得資料庫、表的資料#回傳的結果#$result["status"],執行結果"true"為成功;"false"為執行失敗。#$result["error"],錯誤訊息陣列。#$result["dataColumnName"],抓取的資料欄位名稱陣列.#$result["dataColumnName"][$i]代表第$i+1個欄位名稱#$result["dataContent"],爲資料的內容。#$result["dataContent"][$conf["WhereColumnName"][$i]][$dataSetNum]#$dataSetNum 爲第$dataSetNum+1筆資料#$conf["WhereColumnName"][$i] 爲第 $i+1 個欄位的名稱#$result["dataCount"],爲取得的資料筆數。#$result["sql"],執行的sql字串.#必填參數:$conf["db"]["fastGetDbData"]["dbAddress"]=$conf["dbAddress"];#爲dbServer的位置。$conf["db"]["fastGetDbData"]["dbAccount"]=$conf["dbAccount"];#爲登入dbServer的帳號。$conf["db"]["fastGetDbData"]["dbName"]=$dbName;#爲要存取的資料庫名稱$conf["db"]["fastGetDbData"]["tableName"]="questionnaireQuest";#爲要存取的資料表名稱$conf["db"]["fastGetDbData"]["columnYouWant"]=array("questNo");#你想要的欄位!,若設為「array("*")」則代表全部欄位.#可省略參數:$conf["db"]["fastGetDbData"]["dbPassword"]=$conf["dbPassword"];#爲要存取dbServer的密碼$conf["db"]["fastGetDbData"]["WhereColumnName"]=array("typeNo","questContent");#用於判斷語句的欄位項目陣列。$conf["db"]["fastGetDbData"]["WhereColumnValue"]=array($questionnaireType["usableNumber"],$csvFileContent["csvFileContent"][i][0]);#用於判斷語句的欄位數值陣列,若與LIKE搭配,則可以在關鍵自字串的左右名加上「%」符號,這樣就可以搜尋具有該字串的內容。#$conf["db"]["fastGetDbData"]["WhereColumnCombine"]=array("");#用於判斷語句當中需要()起來的判斷式,須爲陣列值,"s"代表「(」,"e"代表「)」 ,若無則須設爲""。#$conf["db"]["fastGetDbData"]["WhereColumnOperator"]=array("");#用於判斷語句的比較符號陣列,可以用的符號有「"="、">"、"<"、"LIKE"、"NOT LIKE"」,預設都爲「=」。#$conf["db"]["fastGetDbData"]["WhereColumnAndOr"]=array("");#用於判斷語句條件之間成立的條件是AND還是OR,須爲陣列值。其數量應爲要判斷的欄位數量減一。#$conf["db"]["fastGetDbData"]["orderItem"]="";#爲排序的項目依據,若要用隨機抽樣,可以用"rand()",可省略。#$conf["db"]["fastGetDbData"]["ascORdesc"]="";#爲要低增還是遞減排序,asc爲遞增;desc爲遞減。#$conf["db"]["fastGetDbData"]["numberStart"]="0";#為從第幾筆開始讀取,預設為0,代筆第一筆。#$conf["db"]["fastGetDbData"]["numLimit"]="30";#為要取幾筆資料,可以省略,省略則表示不限制數目。#$conf["db"]["fastGetDbData"]["groupBy"]=array("");#爲要以哪幾個欄爲作爲分羣的依據(欄位相同的數值僅會取出一筆)。$getQuestNoResult=db::fastGetDbData($conf["db"]["fastGetDbData"]);unset($conf["db"]["fastGetDbData"]);#如果 $getQuestNoResult["status"] 等於 "false"if($getQuestNoResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$getQuestNoResult;#回傳結果return $result;}#if end#如果 $getQuestNoResult["dataCount"] 為 0if($getQuestNoResult["dataCount"]==0){#設置警告訊息$result["warning"][]="找不名為".$csvFileContent["csvFileContent"][i][0]."的題項";#代表沒表沒有該題目continue;}#if end#依據問卷編號、題號建立指標預測關西#涵式說明:#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。#回傳的數值:#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.#$result["error"],錯誤訊息.#$result["sql"],執行的sql語法.#必填參數:$conf["db"]["insertData"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置$conf["db"]["insertData"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號$conf["db"]["insertData"]["selectedDataBaseName"]=$dbName;#要選取的資料庫名稱$conf["db"]["insertData"]["tableName"]="KRIforecast";#爲要插入資料的資料表名稱$conf["db"]["insertData"]["columnName"]=array("questionnaireNo","questNo","questNoTarget");#爲資料表的項目名稱,#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);$conf["db"]["insertData"]["insertValue"]=array($questionnaireType["usableNumber"],$csvFileContent["csvFileContent"][i][0],$getQuestNoResult["dataContent"]["questNo"][0]);#爲要插入度數值,#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);#可以省略的變數:$conf["db"]["insertData"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼$insertKRIforecastResult=db::insertData($conf["db"]["insertData"]);unset($conf["db"]["insertData"]);#如果 $insertKRIforecastResult["status"] 等於 "false"if($insertKRIforecastResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$insertKRIforecastResult;#回傳結果return $result;}#if end}#if end#反之不存在要預測的KRI題項else{#跳出whilebreak;}#else end}#if end#反之不存在要預測的KRI題項else{#跳出whilebreak;}#else end}#while end}#for end#如果 $conf["delFileAfterImport"]存在if(isset($conf["delFileAfterImport"])){#如果 $conf["delFileAfterImport"] 為 "true"if($conf["delFileAfterImport"]=="true"){#移除要匯入的csv檔案#涵式說明:#移除檔案#回傳的結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#必填參數:$conf["fileAccess"]["delFile"]["fileAddress"]=$conf["questionnaireSetupCsvPath"];#要移除檔案的位置$eraseFileResult=fileAccess::delFile($conf["fileAccess"]["delFile"]);unset($conf["fileAccess"]["delFile"]);#如果 $eraseFileResult["status"] 等於 "false"if($eraseFileResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"][]="移除要匯入的問卷資訊csv檔失敗";#回傳結果return $result;}#if end}#if end}#if end#值行到這邊代表正常$result["status"]="true";#回傳結果return $result;}#function importQuestionnaire end/*#函式說明:#將csv檔,特定欄位的內容結尾加上特定的字串,並下載處理好的csv檔案#回傳的結果:#$result["status"],執行是否正確,"true"代表正確,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["content"],輸出後的csv檔案位置.#必填參數:#$conf["csvFileAddress"],字串,要處理的csv檔案位置與名稱.$conf["csvFileAddress"]="";#$conf["selectedColumn"],字串陣列,要處理的欄位名稱(第一列的內容為欄位名稱)$conf["selectedColumn"]="";#$conf["stringAdded"],字串,要增加的字串內容$conf["stringAdded"]="";#可省略參數:#$conf["outputCsvFilePathAndName"],字串,輸出的csv檔案路徑與名稱,預設檔名爲系統時間,副檔名"csv"會自動加上.#$conf["outputCsvFilePathAndName"]="";#$conf["noDownload"],字串,是否不要自動開始下載,"true"代表不要自動下載.預設為自動下載.#$conf["noDownload"]="true";#參考資料:#無.#備註:#無.*/public static function addStringInTailOnSelectedColumnFormCsv($conf){#初始化要回傳的變數$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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"]["isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck"]["isexistMulti"]["variableCheck"]=array("csvFileAddress","selectedColumn","stringAdded");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["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#var_dump($conf["csvFileAddress"]);#讀取csv檔#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["csv"]["loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$readCsv=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果 $readCsv["status"] 等於 "false"if($readCsv["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$readCsv;#回傳結果return $result;}#if end#依據每筆資料,$i=1是因為不含標題攔for($i=1;$i<$readCsv["lineArrayCount"];$i++){#針對要處理的欄位foreach($conf["selectedColumn"] as $columnName){#在結尾加上字串$readCsv["csvFileContent"][$i][$columnName]=$readCsv["csvFileContent"][$i][$columnName].$conf["stringAdded"];}#foreache end}#for end#建立csv檔案#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["content"],輸出的csv檔案位置.#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置#必填參數:$conf["csv"]["create"]["dataArray"]=$readCsv["csvFileContent"];#要寫入的文字,$conf["dataArray"][$i],代表第 $i 行的內容。#可省略參數:#如果 $conf["outputCsvFilePathAndName"] 有設置if(isset($conf["outputCsvFilePathAndName"])){$conf["csv"]["create"]["csvFilePathAndName"]=$conf["outputCsvFilePathAndName"];#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.}#if end#如果 $conf["csv"]["create"]["noDownload"] 有設置if(isset($conf["csv"]["create"]["noDownload"])){#如果 $conf["csv"]["create"]["noDownload"] 等於 "true"if($conf["csv"]["create"]["noDownload"]=="true"){$conf["csv"]["create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置}#if end}#if end#參考資料來源:#http://php.net/manual/en/function.str-split.php$createCsvResult=csv::create($conf["csv"]["create"]);unset($conf["csv"]["create"]);#var_dump($createCsvResult);#如果 $createCsvResult["status"] 等於 "false"if($createCsvResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$createCsvResult;#回傳結果return $result;}#if end#取得輸出的csv檔案位置與名稱$result["content"]=$createCsvResult["content"];#設置執行正常的識別$result["status"]="true";#回傳結果return $result;}#function addStringInTailOnSelectedColumnFormCsv end/*#函式說明:#將問卷樣本從以逗號間隔的數字編號代表的填寫內容轉換成用「;」間隔的實際填寫的內容,結尾也要一個「;」#也就是將傳統問卷樣本轉換成問卷系統匯入樣本時專用的格式.# 原始樣本格式# A B C# 1,2,3 2,4 3# 3 1,3 2,4# 各題目選項的對應# A 台北 嘉義 臺東 高雄# B ~17 18~25 26~50 51~# C 金 木 水 火# 轉換好的結果# A B C# 台北;嘉義;臺東; 18~25;51~; 水;# 臺東; ~17;26~50; 木;火;#樣本csv檔案的位置的第一列為各欄位的題目.#樣本csv檔案的位置的第一列過後為每筆樣本各欄位題目對應的填答數字代號.數字代號間用半型的逗號「,」間隔.#儲存題目對應的選項內容的csv檔案的第一欄每一列為每個題目的名稱.#儲存題目對應的選項內容的csv檔案的第一欄後面每欄每一列為每個題目對應的選項內容,一個選項佔用一欄.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["content"],處理好的檔案所在位置.#必填參數:#$conf["samplesCsvFile"],字串,樣本csv檔案的位置.$conf["samplesCsvFile"]="";#$conf["questAndOptionCsvFile"],字串,儲存題目對應的選項內容的csv檔案.$conf["questAndOptionCsvFile"]="";#$conf["outputFilePathAndName"],字串,轉換好的檔案要存到哪邊,名稱為何,副檔名會自動加上.$conf["outputFilePathAndName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function numSampleToStr(&$conf){#設置要回傳的變數$result=array();#取得當前執行的涵式名稱$resutl["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("samplesCsvFile","questAndOptionCsvFile","outputFilePathAndName","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["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#檢查檔案是否存在#涵式說明:檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["samplesCsvFile"],$conf["questAndOptionCsvFile"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$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"]);#如果檢查失敗if($checkMultiFileExist["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果檔案沒有都找到if($checkMultiFileExist["allExist"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#讀取 $conf["questAndOptionCsvFile"] 檔案的內容#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["questAndOptionCsvFile"];#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)#http://php.net/manual/en/function.fgetcsv.php#備註:#可用fgetcsv函數替代$getQuestAndOptionCsvFile=csv::loadCsvFile($conf["csv::loadCsvFile"]);unset($conf["csv::loadCsvFile"]);#如果讀取檔案失敗if($getQuestAndOptionCsvFile["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$getQuestAndOptionCsvFile;#回傳結果return $result;}#if end#初始化儲存題目與選項的陣列$questWithOptionArray=array();#有幾列資料就執行幾次for($i=0;$i<$getQuestAndOptionCsvFile["lineArrayCount"];$i++){#有幾個選項欄位就執行幾次for($j=1;$j<count($getQuestAndOptionCsvFile["csvFileContent"][$i]);$j++){#用題目作為key來儲存選項$questWithOptionArray[$getQuestAndOptionCsvFile["csvFileContent"][$i][0]][]=$getQuestAndOptionCsvFile["csvFileContent"][$i][$j];}#for end}#for end#讀取 $conf["samplesCsvFile"] 檔案#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$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["samplesCsvFile"];#csv檔案的位置#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv::loadCsvFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv::loadCsvFile"]["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)#http://php.net/manual/en/function.fgetcsv.php#備註:#可用fgetcsv函數替代$getSamplesCsvFile=csv::loadCsvFile($conf["csv::loadCsvFile"]);unset($conf["csv::loadCsvFile"]);#如果讀取檔案失敗if($getSamplesCsvFile["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$getSamplesCsvFile;#回傳結果return $result;}#if end#初始化儲存轉成實際填寫內容的陣列$converedSamplesArray=array();#儲存第一列的題目$converedSamplesArray[]=$getSamplesCsvFile["csvFileContent"][0];#有幾列資料就執行幾次for($i=1;$i<$getSamplesCsvFile["lineArrayCount"];$i++){#有幾題目就執行幾次foreach($getSamplesCsvFile["csvFileContent"][$i] as $questName => $filledNumSpiltedByComma){#分隔用逗號分隔的填寫編號#涵式說明:#將多個固定格式的字串分開,並回傳分開的結果#回傳的參數:#$result["status"],執行成功與否,若爲0,代表執行成功,若爲1代表執失敗。#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j)段內容#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段#必填參數:$conf["stringProcess::spiltMutiString"]["stringIn"]=array($filledNumSpiltedByComma);#要處理的字串陣列。$conf["stringProcess::spiltMutiString"]["spiltSymbol"]=",";#爲要以哪個符號作爲分割。$spiltNumStr=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);unset($conf["stringProcess::spiltMutiString"]);#如果分隔字串失敗if($spiltNumStr["status"]==1){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltNumStr;#回傳結果return $result;}#if end#初始化暫存填寫的選項字串$filledStr="";#分割成幾個數字就執行幾次for($j=0;$j<$spiltNumStr["spiltString"][0]["dataCounts"];$j++){#如果選項內容為0if(!isset($questWithOptionArray[$questName][$spiltNumStr["spiltString"][0]["dataArray"][$j]-1])){#代表為空值#轉換為""$questWithOptionArray[$questName][$spiltNumStr["spiltString"][0]["dataArray"][$j]-1]="";}#if end#從數字轉換成選項內容$filledStr=$filledStr.$questWithOptionArray[$questName][$spiltNumStr["spiltString"][0]["dataArray"][$j]-1].";";}#for end#儲存該筆樣本該題填寫的內容$converedSamplesArray[$i][]=$filledStr;}#for end}#for end#將 $converedSamplesArray 的內容寫入到轉換好的檔案裡面#涵式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["content"],輸出的csv檔案位置.#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置#必填參數:$conf["csv::create"]["dataArray"]=$converedSamplesArray;#要寫入的文字,#$conf["dataArray"][$i],代表第 $i 行的內容,#$conf["dataArray"][$i][$j],代表第 $i 第 $j個欄位的內容.#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv::create"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["csv::create"]["csvFilePathAndName"]=$conf["outputFilePathAndName"];#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.$conf["csv::create"]["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置#參考資料來源:#http://php.net/manual/en/function.str-split.php#http://php.net/manual/en/function.fputcsv.php#備註:#可用fputcsv涵式替代#建議增加自動判斷是否要建立csv檔路徑所需的資料夾$createCsv=csv::create($conf["csv::create"]);unset($conf["csv::create"]);#如果建立csv檔案失敗if($createCsv["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$createCsv;#回傳結果return $result;}#if end#儲存處理好的問卷樣本csv檔案位置與名稱$result["content"]=$createCsv["content"];#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function numSampleToStr end}#class analyse end?>