我有一个<tr><td>Val 1</td><td>Val 2</td><td>Val 3</td></tr>
<tr><td>Val 1</td><td>Val 2</td><td>Val 3</td></tr>
<tr><td>Val 1</td><td>Val 2</td><td>Val 3</td></tr>
文件,我存储数据如下:
val1
每隔一分钟左右就会添加一个新字符串。
我有一个包含三个输入的表单val2
,val3
和[HTML element] Val 1 [2 HTML elements] val2 [2 HTML elements] val3 [2 HTML elements]
。提交表单时,它会将值保存到文本文件中,如下所示:
.text
我的问题是:如果字符串存在,如何在文件中搜索,如果存在,则执行一段代码,如果没有,则继续并将数据保存到文件中?
我知道我可以使用数据库,但我必须使用template <class T>
class A
{
template <class U>
void foo(T&& t, U&& u);
};
文件。
答案 0 :(得分:1)
首先,您必须通过读取和字符串搜索来检查文件,如果找不到该字符串,则执行操作。请参考以下示例。
<?php
$productFile = file_get_contents('products.txt');
$products = str_word_count($productFile, 1);
$status = 'i love watching tv on my brand new apple mac';
$found = false;
foreach ($products as $product)
{
if (strpos($status,$product) !== false) {
$found = true;
break;
}
}
if ($found) {
echo 'the status contains a product';
}
else {
echo 'The status doesnt contain a product';
}
?>
答案 1 :(得分:1)
我认为现有的答案可以满足这个问题,但只是评论一下 问题本身:
可以简化操作的东西是使用不同的格式 文本文件。我假设您正在使用文件内部的标记,以便您 可以轻松地将其显示为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;
}
然后当你将它们全部绑在一起用于你的用例时,你会有类似的东西:
<?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
调用更改为执行相应操作的函数
检查。但由于数据是以数组格式化的,因此检查将包括在内
只需迭代现有数据并比较您的任何字段
想要新的领域。