我认为现有的回答满足的问题,而只是对 问题本身发表评论:
一些可以简化操作使用不同的格式,为您 文本文件。我假定你正在使用的文件里标记,这样你 可以轻松将其显示为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