Rev 226 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*QBPWCF, Quick Build PHP website Component base on Fedora Linux.Copyright (C) 2015~2025 Min-Jhin,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;/*類別說明:用於處理csv格式檔案的類別.備註:無.*/class csv{/*#函式說明:#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.#回傳結果:#$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/*#函式說明:#快速建立一個csv檔案,並且要求使用者下載。#回傳結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],錯誤訊息陣列.#$result["function"],取得當前執行的函數名稱#$result["content"],輸出的csv檔案位置.#如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置#必填參數:#$conf["dataArray"],字串陣列,要寫入的文字.$conf["dataArray"][$i],代表第 $i 行的內容,$conf["dataArray"][$i][$j],代表第 $i 第 $j個欄位的內容.$conf["dataArray"]=array();#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["csvFilePathAndName"]="";#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.#$conf["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置,預設為"true".#參考資料:#http://php.net/manual/en/function.str-split.php#http://php.net/manual/en/function.fputcsv.php#備註:#可用fputcsv涵式替代#建議增加自動判斷是否要建立csv檔路徑所需的資料夾*/public static function create(&$conf){#初始化要回傳的變數$result=array();#初始化當前執行的函數名稱$result["funciton"]=__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("dataArray","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=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("csvFilePathAndName","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(null,"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"]);#如果檢查失敗if($checkResult["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果檢查不通過if($checkResult["passed"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $conf["csvFilePathAndName"] 沒有設置if(!isset($conf["csvFilePathAndName"])){#預設爲系統時間#涵式說明:#回傳RFC822格式的當前時間,格式會像這種 「Wed, 25 Jan 12 19:13:15 +0800」#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],RFC822格式的時間.#必填的參數:$conf["time"]["get_RFC822_Time"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php#ex:"Asia/Taipei"$systemTime=time::get_RFC822_Time($conf["time"]["get_RFC822_Time"]);unset($conf["time"]["get_RFC822_Time"]);#如果取得時間失敗if($systemTime["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$systemTime;#回傳結果return $result;}#if end#設定檔案名稱$conf["csvFilePathAndName"]=$systemTime;}#if end#加上副檔名csv$conf["csvFilePathAndName"]=$conf["csvFilePathAndName"].".csv";/*#檢查 $conf["csvFilePathAndName"] 是否含有 "/"#函式說明:#檢查字串裡面有無指定的關鍵字#回傳的結果:#$result["status"],"true"代表執行成功,"false"代表執行失敗。#$result["error"],錯誤訊息#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。#$result["keyWordCount"],找到的關鍵字數量.#必填的參數:$conf["search.findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字$conf["search.findKeyWord"]["string"]=$conf["csvFilePathAndName"];#要被搜尋的字串內容#可省略的參數:#$conf["search.findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。$searchResult=search::findKeyWord($conf["search.findKeyWord"]);unset($conf["search.findKeyWord"]);#如果搜尋失敗if($searchResult["status"]=="false"){#設置執行異常$result["status"]="false";#設置錯誤訊息$result["error"]=$searchResult;#回傳結果return $result;}#if end#如果csv的檔案位置含有 "/"if($searchResult["founded"]=="true"){#用 "/" 去分割csv檔案路徑字串#涵式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填的參數:$conf["stringProcess.spiltString"]["stringIn"]=$conf["csvFilePathAndName"];#要處理的字串。$conf["stringProcess.spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割#備註:#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。$stringSpiltResult=stringProcess::spiltString($conf["stringProcess.spiltString"]);unset($conf["stringProcess.spiltString"]);#如果分割csv的檔案位置路徑字串失敗if($stringSpiltResult["status"]=="false"){#設置執行異常$result["status"]="false";#設置錯誤訊息$result["error"]=$searchResult;#回傳結果return $result;}#if end#初始化檔案路徑變數$filePath="";#將資料夾路徑字串組合起來,剔除csv檔的名稱。for($i=0;$i<$stringSpiltResult["dataCounts"]-1;$i++){#串聯路徑$filePath=$filePath.$stringSpiltResult["dataArray"][$i];#如果不是最後一筆if($i!=$stringSpiltResult["dataCounts"]-2){#串聯路徑$filePath=$filePath."/";}#if end}#for end#涵式說明:#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限.#回傳的結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列#必填的參數:$conf["fileAccess.createFolderAfterCheck"]["dirPositionAndName"]=$filePath;#新建的位置與名稱#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess.createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];#可省略的參數:#$conf["fileAccess.createFolderAfterCheck"]["dirPermission"]="";#新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.$pathCreateResult=fileAccess::createFolderAfterCheck($conf["fileAccess.createFolderAfterCheck"]);unset($conf["fileAccess.createFolderAfterCheck"]);#如果 建立資料夾路徑失敗if($pathCreateResult["status"]=="false"){#設置執行異常$result["status"]="false";#設置錯誤訊息$result["error"]=$pathCreateResult;#回傳結果return $result;}#if end}#if end*/#var_dump($conf["csvFilePathAndName"]);#建立csv檔案#涵式說明:#將字串寫入到檔案#回傳的結果:#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填的參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略的參數:#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $createStatus["status"] 等於 "false"if($createStatus["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$createStatus;#回傳結果return $result;}#if end#依據陣列組數寫入置檔案中for($i=0;$i<count($conf["dataArray"]);$i++){#如果該列資料不存在if(!isset($conf["dataArray"][$i])){#跳到下個迴圈continue;}#if end#取得該筆資料有幾個欄位$thisDataCotainElementsCount=count($conf["dataArray"][$i]);#計數用的變數$temp=0;#針對每一組foreach($conf["dataArray"][$i] as $key=>$value){#如果不是最後一個元素if($temp!=$thisDataCotainElementsCount-1){#涵式說明:#將字串寫入到檔案#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填的參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱#檢測$value的開頭與結尾是否有皆爲「"」#將每欄的內容一個個字分開$strArray=str_split($value,1);#取得裏面有幾個元素$strArrayElementCount=count($strArray);#如果第一個元素爲「"」if($strArray[0]=="\""){#如果元素數量大於2if($strArrayElementCount>2){#如果最後一個元素爲「"」if($strArray[$strArrayElementCount-1]=="\""){#寫入欄位時不用加上「"」$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value.",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#檢查變數內容#var_dump($conf["fileAccess"]["writeTextIntoFile"]["inputString"]);}#if end}#if end#元素內容小於2else{#寫入欄位時不用加上「"」$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value.",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。}#else end}#if end#反之第一個元素不爲「"」else{#檢查變數內容#var_dump($value);$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="\"".$value."\",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。}#else end#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略的參數:$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#計數用的變數加1$temp++;#如果 $createStatus["status"] 等於 "false"if($createStatus["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$createStatus;#回傳結果return $result;}#if end}#if end#反之爲最後一個元素else{#檢測$value的開頭與結尾是否有皆爲「"」#將每欄的內容一個個字分開$strArray=str_split($value,1);#取得裏面有幾個元素$strArrayElementCount=count($strArray);#如果第一個元素爲「"」if($strArray[0]=="\""){#如果元素數量大於2if($strArrayElementCount>2){#如果倒數第2個元素爲「"」if($strArray[$strArrayElementCount-1]=="\""){#寫入欄位時不用加上「"」$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。}#if end}#if end#元素內容小於2else{#寫入欄位時不用加上「"」$conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。}#else end}#if end#反之第一個元素不爲「"」else{$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="\"".$value."\"\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。}#else end#寫入時加上換行符號#涵式說明:#將字串寫入到檔案#回傳的結果:#$result,true表示檔案建立成功,false表示檔案建立失敗#必填的參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略的參數:$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $createStatus["status"] 等於 "false"if($createStatus["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$createStatus;#回傳結果return $result;}#if end}#else end}#foreach 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#修改產生好的csv檔權限$chmodResult=chmod($conf["csvFilePathAndName"],0775);#如果修改檔案權限失敗if($chmodResult==FALSE){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="檔案「".$conf["csvFilePathAndName"]."」的權限變更失敗";#回傳結果return $result;}#if end#如果 $conf["noDownload"] 有設置if(isset($conf["noDownload"])){#如果 $conf["noDownload"] 等於 trueif($conf["noDownload"]=="true"){#設置執行正常$result["status"]="true";#設置檔案的位置$result["content"]=$conf["csvFilePathAndName"];#回傳結果return $result;}#if end}#if end#要求使用者下載該檔案#說明:#要求使用者Download某檔案#回傳結果:#$result["status"],字串,"true"爲成功,"false"反之失敗#$result["error"],陣列,錯誤訊息#$result["function"],字串,當前執行的函數名稱.#必填的參數:$conf["header"]["askUserDownloadFile"]["filePositionAndName"]=$conf["csvFilePathAndName"];#檔案的位置與名稱#可省略的參數:$conf["header"]["askUserDownloadFile"]["fileDisplayName"]=basename($conf["csvFilePathAndName"]);#要顯示的檔案名稱,若要放中文請將其文字放在()裏面,這樣種文字才會顯現。預設為 basename($conf["filePositionAndName"]);#$conf["header"]["askUserDownloadFile"]["mimeType"],字串,檔案的mimeType,預設為"application/octet-stream".#$conf["header"]["askUserDownloadFile"]["mimeType"]="application/octet-stream";s#參考資料來源:#http:#php.net/manual/en/function.readfile.php$askUserDownloadFile=header::askUserDownloadFile($conf["header"]["askUserDownloadFile"]);unset($conf["header"]["askUserDownloadFile"]);#如果要求下載檔案失敗if($askUserDownloadFile["status"]=="false"){#設置執行正常$result["status"]="false";#設置檔案的位置$result["content"]=$askUserDownloadFile;#回傳結果return $result;}#if end#設置執行正常$result["status"]="true";#設置檔案的位置$result["content"]=$conf["csvFilePathAndName"];#回傳結果return $result;}#function create 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["csvFilePositionAndName"],字串,csv檔案的位置$conf["csvFilePositionAndName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱),"預設為true".#$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)#http://php.net/manual/en/function.fgetcsv.php#備註:#可用fgetcsv函數替代*/public static function loadCsvFile(&$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("csvFilePositionAndName","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("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("firstLineVarName");#$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"]);#如果檢查失敗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["fileContent"],爲檔案的內容陣列#$result["lineCount"],爲檔案內容總共的行數#必填的參數:$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["csvFilePositionAndName"];#爲檔案的位置以及名稱#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["getFileContent"]["fileArgu"]=$conf["fileArgu"];#參考資料:#file():取得檔案內容的行數#http:#php.net/manual/en/function.file.php$fileContentArray=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);unset($conf["fileAccess"]["getFileContent"]);#如果 $fileContentArray["status"] 等於 "false" 則代表檔案內容抓取失敗if($fileContentArray["status"]=="false"){#設定執行錯誤識別$result["status"]="false";#記錄錯誤訊息$result["error"]=$fileContentArray;#回傳檔案內容return $result;}#if end#初始化csv檔案逐行內容的陣列$result["lineArray"]=$fileContentArray["fileContent"];#取得內容有幾列$result["lineArrayCount"]=$fileContentArray["lineCount"];#初始化第一行的內容$firstLineContent=array();#有幾行就執行幾次for($i=0;$i<$result["lineArrayCount"];$i++){#將每行的文字一個個字分開$lineContentArray=str_split($result["lineArray"][$i],1);#取得陣列裏面字的長度$wordCount=count($lineContentArray);#初始化開始紀錄欄位內容的識別#"false"代表目前沒有進行紀錄#"true"代表目前在進行紀錄$wordStart="false";#初始化用於確保單欄裡面可以多逗號的雙引號「"」#"false"代表目前在 「"」 外#"true"代表目前在 「"」內$testDelimiter="false";#初始化欄位內容的陣列$wordArray=array();#暫存形成字的字串$wordClip="";#有幾個字就執行幾次for($j=0;$j<$wordCount;$j++){#如果#$wordStart 為 "false"#$testDelimiter 為 "false" 且#$lineContentArray[$j] 等於 「"」if($wordStart=="false" && $testDelimiter=="false" && $lineContentArray[$j]=="\"" ){#進入""範圍裡面$testDelimiter="true";#開始讀取欄位內容$wordStart="true";#跳到下一個迴圈continue;}#if end#如果 $testDelimiter 為 "true" 且#$wordStart 為 "true" 且#$lineContentArray[$j] 等於 「"」if($wordStart=="true" && $testDelimiter=="true" && $lineContentArray[$j]=="\"" ){#echo "<br>離開\"";#離開""範圍裡面$testDelimiter="false";#停止讀取欄位內容$wordStart="false";#如果是最後一個字if($j==$wordCount-1){#將取得的片段內容儲存成一個欄位$wordArray[]=$wordClip;#將片段的內容初始化$wordClip="";#跳到下一個迴圈continue;}#if end#跳到下一個迴圈continue;}#if end#如果#$wordStart 等於 "true" 或 $testDelimiter 等於 "true"#或#$wordStart 等於 "false" 且 $testDelimiter 等於 "false" 且 $lineContentArray[$j] 不等於 ","if(($wordStart=="true" || $testDelimiter=="true")||($wordStart=="false" && $testDelimiter=="false" && $lineContentArray[$j]!=",")){#暫存形成字的字串$wordClip=$wordClip.$lineContentArray[$j];#echo "<br>讀取".$lineContentArray[$j];#echo "<br>暫存欄位內容變成".$wordClip;#如果是最後一個字if($j==$wordCount-1){#將取得的片段內容儲存成一個欄位$wordArray[]=$wordClip;#將片段的內容初始化$wordClip="";#將欄位開始設為 "false"$wordStart="false";#跳到下一個迴圈continue;}#if end#跳到下一個迴圈continue;}#if end#如果 $lineContentArray[$j]等於 「,」 且 $testDelimiter 等於 "false"if($lineContentArray[$j]=="," && $testDelimiter=="false" ){#將取得的片段內容儲存成一個欄位$wordArray[]=$wordClip;#echo "<br>遇到逗號,欄位內容讀取完畢";#將片段的內容初始化$wordClip="";#將欄位開始設為 "false"$wordStart="false";#跳到下一個迴圈continue;}#if end}#for end#如果目前讀到的是第一行if($i==0){#取得第一行的內容$firstLineContent=$wordArray;}#if end#如果 $conf["firstLineVarName"] 等於 trueif($conf["firstLineVarName"]=="true"){#將 $wordArray 的 key 更改爲第一行的欄位內容#函式說明:#將陣列的key重新排序,然後回傳,以便後續存取。#也可以指定key的內容,但一定要跟元素數量相同。#若指定了key的名稱,則 $result["dataContent"] 會變成 $result["dataContent"]["指定的key名稱"]#回傳的解果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["error"],執行錯誤的訊息.#$result["function"],當前執行的函數名稱.#$result["dataContent"],儲存陣列元素的內容.#必填的參數:$conf["arrays"]["createV2"]["arrayContent"]=$wordArray;#陣列變數#可省略的參數:$conf["arrays"]["createV2"]["specifiesKeyArray"]=$firstLineContent;#指定key的名稱,須與$conf["arrayContent"]的元素數量相同$temp=arrays::createV2($conf["arrays"]["createV2"]);unset($conf["arrays"]["createV2"]);#如果建立陣列失敗if($temp["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$temp;#回傳結果return $result;}#if end#取得更改後的結果$wordArray=$temp["dataContent"];}#if end#取得該行的各欄位內容$result["csvFileContent"][$i]=$wordArray;}#for end#執行到這邊代表執行成功$result["status"]="true";#回傳csv檔案的內容return $result;}#function loadCsvFile end/*#函式說明:#讀取csv檔案的內容#回傳結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱#$result["content"],csv檔案內容的陣列#$result["content"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.#如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["content"]["第幾列"]["第一列各個欄位的名稱"]#$result["title"],欄位的名稱#$result["lineCount"],總共幾列資料#必填參數:#$conf["csvFilePositionAndName"],字串,csv檔案的位置$conf["csvFilePositionAndName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱),預設為"true".#參考資料:#http://www.php.net/manual/en/function.str-split.php#http://php.net/manual/en/function.fgetcsv.php#備註:#無.*/public static function read(&$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("csvFilePositionAndName","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("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("firstLineVarName");#$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"]);#如果檢查失敗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內容的變數$csvFileContent=array();#如果開啓 $conf["csvFilePositionAndName"] 成功if(($handle=fopen($conf["csvFilePositionAndName"],"r"))!==FALSE){#如果檔案還有內容while(($data=fgetcsv($handle))!==FALSE){#儲存該行內容$csvFileContent[]=$data;}#while end}#if end#反之else{#設置錯誤識別$result["status"]="false";#設置錯訊息$resukt["error"][]="檔案".$conf["csvFilePositionAndName"]."開啓失敗!";#回傳結果return $result;}#else end#初始化欄位標題陣列$title=array();#如果 $conf["firstLineVarName"] 爲 "true"if($conf["firstLineVarName"]=="true"){#迴圈,執行欄位數次數for($i=0;$i<count($csvFileContent[0]);$i++){#取得欄位名稱$title[]=$csvFileContent[0][$i];}#for end#取得欄位名稱$result["title"]=$title;#用欄位名稱作爲key來儲存每列內容#迴圈,執行列數次數for($i=1;$i<count($csvFileContent);$i++){#迴圈,執行欄位數目次for($j=0;$j<count($csvFileContent[0]);$j++){#用數字作爲key來儲存內容$result["content"][$j][$i-1]=$csvFileContent[$i][$j];#用欄位名稱作爲key來儲存內容$result["content"][$title[$j]][$i-1]=$csvFileContent[$i][$j];}#for end}#for end}#if end#反之直接儲存 fgetcsv 取得的內容else{#取得csv檔案內容$result["content"]=$csvFileContent;}#else end#取得資料筆數$result["lineCount"]=count($result["content"])/2;#設置執行正常$result["status"]="true";#回傳結果return $result;}#funciton read end/*#函式說明:#計屬csv檔裡面的關鍵字,亦即內容剛好等於關鍵字的次數.#回傳的結果:#$result["status"],執行正常與否,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["content"],找到的關鍵字數量.#$result["function"],當前執行的函數名稱.#必填參數:#$conf["csvFileAddress"],字串,csv檔案的位置與名稱.$conf["csvFileAddress"]="";#$conf["keyWord"],字串,要尋找的關鍵字.$conf["keyWord"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱),"true"表示第一列不在搜尋範圍裡,預設為"true".#$conf["firstLineVarName"]="true";#參考資料:#無.#備註:#無.*/public static function keyWordsCount(&$conf){#初始化要回傳的變數$reuslt=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["content"]=0;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$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("csvFileAddress","keyWord","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("firstLineVarName");#$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"]);#如果檢查失敗if($checkResult["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果檢查不通過if($checkResult["passed"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#讀座位表csv檔#涵式說明:#讀取csv檔案的內容#回傳得結果:#$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["csvFileContent"],csv檔案內容的陣列.#$result["csvFileContent"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.#如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["csvFileContent"]["第幾列"]["第一列各個欄位的名稱"]#$result["lineArray"],csv檔案逐列內容的陣列.#$result["lineArrayCount"],總共幾列資料.#必填的參數:$conf["csv"]["loadCsvFile"]["csvFilePositionAndName"]=$conf["csvFileAddress"];#csv檔案的位置#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];#可省略的參數:$conf["csv"]["loadCsvFile"]["firstLineVarName"]=$conf["firstLineVarName"];#第一行是否爲變數名稱(各個欄位的名稱)#參考資料來源:#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)$seatMap=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);unset($conf["csv"]["loadCsvFile"]);#如果 $seatMap["status"] 等於 "false"if($seatMap["status"]=="false"){#設置執行錯誤$result["status"]="true";#設置錯誤訊息$result["error"]=$seatMap;#回傳結果return $result;}#if end#根據csv檔裡每列內容foreach($seatMap["csvFileContent"] as $row){#根據每列的欄元素foreach($row as $col){#如果欄位內容等於關鍵字if($col==$conf["keyWord"]){#$result["content"]加1$result["content"]++;}#if end}#foreach end}#foreach end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function keyWordCount end/*#函式說明:#將透過db::fastGetDbData取得的資料表資料轉換成用csv::create建立csv檔所需的格式 ,亦即轉換成一個二維陣列記錄每筆資料每個欄位填寫的內容.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["content"],轉換好要給csv::create建立csv檔所需的格式變數.#必填參數:#$conf["db::fastGetDbData"],陣列,透過db::fastGetDbData取得的回傳結果.$conf["db::fastGetDbData"]=$;#可省略參數:#$conf["columnTitleName"],字串陣列,每個欄位的名稱,預設為資料表欄位的名稱.#$conf["columnTitleName"]=array();#參考資料:#無.#備註:#無.*/public static function dataTable2csvFormat(&$conf){#初始化要回傳的變數$reuslt=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#初始化要回傳的csv格式變數$result["content"]=array();#如果 $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::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("db::fastGetDbData");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");#可以省略的參數:#$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("columnTitleName");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".#$conf["skipableVarDefaultValue"]=array("");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查失敗if($checkResult["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果檢查不通過if($checkResult["passed"]=="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $conf["db::fastGetDbData"] 的執行結果不為正常的if($conf["db::fastGetDbData"]["status"]=="false"){#echo "123";#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$conf["db::fastGetDbData"];#回傳結果return $result;}#if end#如果 $conf["db::fastGetDbData"] 的資料筆數為 0if($conf["db::fastGetDbData"]["dataCount"]==0){#echo "123";#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$conf["db::fastGetDbData"];#回傳結果return $result;}#if end#如果沒有設置 $conf["columnTitleName"]if(!isset($conf["columnTitleName"])){#預設為資料表的欄位名稱$conf["columnTitleName"]=$conf["db::fastGetDbData"]["dataColumnName"];}#if end#反之有設置 $conf["columnName"]else{#如果 $conf["columnName"] 的數量與 $conf["db::fastGetDbData"]["dataColumnName"] 不一樣if(count($conf["columnTitleName"])!=count($conf["db::fastGetDbData"]["dataColumnName"])){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"][]="參數\$conf[\"columnName\"]與\$conf[\"db::fastGetDbData\"][\"dataColumnName\"]的元素數量要一樣";#回傳結果return $result;}#if end}#else end#建立標題欄的內容$result["content"][]=$conf["columnTitleName"];#有幾筆資料就執行幾次迴圈for($i=0;$i<$conf["db::fastGetDbData"]["dataCount"];$i++){#初始化暫存的陣列$temp["oneData"]=array();#有幾個欄位就執行幾次迴圈for($j=0;$j<count($conf["columnTitleName"]);$j++){#記錄第$i+1筆資料的第$j+1欄位的內容$temp["oneData"][]=$conf["db::fastGetDbData"]["dataContent"][$conf["db::fastGetDbData"]["dataColumnName"][$j]][$i];}#for end#記錄第$i+1筆資料的內容$result["content"][]=$temp["oneData"];}#for end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function dataTable2csvFormat end}#class csv end?>