昨天經過思考後,決定將「資料讀取」的方式改變。
雖然還未成熟,不過已經比起原定的方式更加完整。
今天就來實作資料讀取與版面的呈現(模型)
首先先看一下新版本的資料檔案(data.txt):
;title 測試留言標題 ;nickname 蒼時 弦 ;contents 這是測試留言, 主要是對資料解析做測試 ;responds 奏>>回復了留言! 影賜>>回復留言~
接著是新的讀取程式 data.php
<?php
function setdata($content, array $eArrs){
$datas = explode(PHP_EOL, $content);
foreach($datas as $key => $line){
if($line[0] == ';'){
++$dKey;
if(in_array($line, $eArrs))
$enableArr = (bool) true;
else
$enableArr = (bool) false;
continue;
}
if($enableArr)
$dataGroup[$dKey][] = $line;
else
$dataGroup[$dKey] .= $line;
}
return $dataGroup;
}
$eArrs = array(';contents', ';responds');
$content = file_get_contents('data.txt');
$data = setdata($content, $eArrs);
print_r($data);
?>
輸出結果是一組依照順序的陣列,如果是「同一組,則再建立新陣列儲存。」
以上就是初步完成資料讀取了!
接下來就是呈現留言以及排序的處理。
現在新增一個 comments.php 來製作模型。
<?php
function getComment($file, array $eArrs){ //建立 getComment 函式
$data = file_get_contents($file); //讀取檔案內容
$data = explode(PHP_EOL, $data); //以斷行分割檔案內容( PHP_EOL 會依照作業系統切換 \n 或 \r\n )
foreach($data as $key => $line){ //將內容陣列放入 foreach 運作
if($line[0] == ';'){ //檢查是否為註解
++$dKey; //如果是則 +1
if(in_array($line, $eArrs)) //檢查是否產生陣列(兩行以上資料需要)
$enableArr = (bool) true; //傳回真
else
$enableArr = (bool) false; //傳回假
continue; //直接結束本次迴圈
}
if($enableArr) //檢查是否開啟產生陣列
$dataGroup[$dKey][] = $line; //如為真,則產生陣列儲存(二維)
else
$dataGroup[$dKey] .= $line; //如為假,則直接儲存資料(並且連接起來)
}
return $dataGroup; //傳回解析後陣列
}
$glob = glob('./data/*.txt'); //搜尋資料檔案
sort($glob, SORT_NUMERIC); //排序檔案( 由大到小 )
$eArr = array(';contents', ';responds'); //指定需要產生二維鎮列的註解
$_GET['page'] = !$_GET['page'] ? 1 : $_GET['page']; //檢查是否有指定頁碼
$start = ($_GET['page'] - 1) * 2; //設定迴圈開始編號
$end = $_GET['page'] * 2; //設定回圈結束編號
for($i = $start; $i < $end; ++$i){ //從開始編號運作到結束編號。
if(empty($glob[$i])) break; //檢查是否有此筆資料,無則跳出
$comments = getComment($glob[$i], $eArr); //呼叫 getComment 函式分析檔案
$contents = implode('', $comments[3]); //將內容部份特別分析,用結合
/* 開始產生畫面 */
echo "
主題:{$comments[1]}暱稱:{$comments[2]}內容:{$contents}
";
}
?>
之後請新增一個 /data 資料夾,並且新增大於二的「檔案」
檔名: 1.txt ~ ?.txt (一律數字)
檔案內容:
;title 留言標題 ;nickname 留言者暱稱 ;contents 留言內容, 可以換行輸入,並不會影響。
接著打開 comments.php 會發現檔名最大的兩篇被顯示,其餘的並沒有顯示。
原因在哪裡呢?
http://網址/?page=2
輸入之後,會發現 (檔名最大-2) 和 (檔名最大-3) 的檔案被顯示出來。
沒錯,這次讀取資料時,順便將分頁功能加入了系統。
明天將會繼續改善讀取功能,並且加入「發表留言」的模型。








