我認爲現有的回答滿足的問題,而只是對 問題本身發表評論:
一些可以簡化操作使用不同的格式,爲您 文本文件。我假定你正在使用的文件裏標記,這樣你 可以輕鬆將其顯示爲HTML,但你不應該讓你的數據顯示 的方式決定你的數據存儲方式。如果您存儲在一個CSV 您的數據,然後你能夠很容易地代表你的數據表作爲一個數組,這使得 訪問要容易得多值,你在內存中,而不是單一的長字符串有結構化和層次化 表示。
這不僅可以簡化數據處理,還可以讓您輕鬆更改數據的顯示方式,而無需更改數據的結構 。目前,如果你想使用 div的,而不是表中顯示您的數據,那麼你就必須改變的不僅僅是所有文本文件本身的數據 也全部在你的代碼的地方,在那裏你 期望能夠解析它。通過分離存儲表示和視覺 表示你能夠做出一個位置這些變化。使用CSV還可以使您的數據在其他系統中更好地互操作。
你可以存儲你的數據像這樣:
Val 1a, Val 2a, Val 3a
Val 1b, Val 2b, Val 3b
Val 1c, Val 2c, Val 3c
然後訪問現有的數據並保存新的數據可能是:
<?php
define("DATA_FILE", "data.csv");
/**
* Retrieves the data from the csv file and returns it in the format:
* [
* [
* Val1 => ...,
* Val2 => ...,
* Val2 => ...,
* ],
* [
* Val1 => ...,
* Val2 => ...,
* Val2 => ...,
* ]
* ],
*/
function getData() {
// these will be the key names for the fields in the array
$fieldNames = ["Val1", "Val2", "Val3"];
$data = [];
foreach (file(DATA_FILE) as $row) {
$csvRow = str_getcsv($row);
$data[] = array_combine($fieldNames, $csvRow);
}
return $data;
}
/**
* Saves new data to the file. Takes data in the form:
* [
* Val1 => ...,
* Val2 => ...,
* Val2 => ...,
* ],
*/
function saveNewData($values) {
$fp = fopen(DATA_FILE, "a");
fputcsv($fp, [$values["Val1"], $values["Val2"], $values["Val3"]]);
fclose($fp);
}
然後將數據陣列打印成表:
<?php
/**
* Returns HTML markup for displaying the data in a table. Returns something
* like:
*
* <tr><td>Val1</td><td>Val2</td><td>Val3</td></tr>
* <tr><td>Val1</td><td>Val2</td><td>Val3</td></tr>
*/
function getTableMarkup($data) {
$markup = "";
foreach ($data as $item) {
$markup .= "<tr>";
foreach ($item as $field) {
$markup .= "<td>{$field}</td>";
}
$markup .= "</tr>";
}
return $markup;
}
然後,當你把它捆在一起爲你的用例,你會有東西l邁克:
<?php
// get the submitted form values
$newValues = [
"Val1" => $_REQUEST["Val1"],
"Val2" => $_REQUEST["Val2"],
"Val3" => $_REQUEST["Val3"],
];
// fetch the existing data from the file in a structured array
$data = getData();
// check if the newly submitted values already exist in the data
if (in_array($newValues, $data)) {
echo "Data already exists...";
} else {
echo "Data doesn't exist, saving it...";
saveNewData($newValues);
$data = getData();
}
// display the table of data
echo "<table>" . getTableMarkup($data) . "</table>";
我知道這可能不是你能夠使在這一點上的變化,但我 認爲它還是值得一提。還要注意,在這裏我假設你 正在檢查一行數據是否已經存在,其中三個新值是 與該行中的三個現有值相同。如果您想檢查提交的Val1是否與以前提交的Val2相同,那麼您將 需要將in_array
呼叫更改爲執行適當的 檢查的功能。但是,由於數據格式化爲數組,因此檢查將包括 ,只需對現有數據進行迭代,然後將您想要的任何字段與新字段進行比較。
爲什麼要存儲_data_與HTML代碼混合...? – CBroe