我目前正在尝试构建通用的TO DO应用。我有一个输入字段,用户可以在其中输入任务,然后将其写入名为“ todo.txt”的文件中。
if(isset($_POST["submit"])) {
$task = $_POST["task"];
//check if file already exists
if(file_exists("var/www/html/todo/todo.txt")) {
//read file as array
$todo = file('todo.txt');
//check if task is in array
if(in_array($task, $todo)) {
echo "Task already exists!";
} else {
//add task
file_put_contents('todo.txt', $task.PHP_EOL, FILE_APPEND);
$todo = file('todo.txt');
}
//file not found, create file and and task
} else {
file_put_contents('todo.txt', $task.PHP_EOL, FILE_APPEND);
}
我的问题是我检查任务是否已设置并写入文件 if(in_array($ task,$ todo))的条件分支不起作用,同一任务不断添加。
感谢您的回答,标志 FILE_IGNORE_NEW_LINES 做到了:)
答案 0 :(得分:5)
file
返回文件中包括尾随换行符的行,因此它们将与正在提交的字符串不匹配(除非它也包含换行符)。
避免这种情况的最简单方法是使用FILE_IGNORE_NEW_LINES
标志:
$todo = file('todo.txt', FILE_IGNORE_NEW_LINES);
答案 1 :(得分:2)
我的建议是使用json文件而不是txt文件。这将为您提供完整的阵列功能,而不会出现任何问题。
答案 2 :(得分:1)
使用FILE_IGNORE_NEW_LINES
。返回的数组文件在每个值的末尾都包含换行符。
答案 3 :(得分:0)
在文件退出后立即更改
<ion-col *ngFor="let resKeyFt of keyFeatures; let i = index" class="p-0" col-6>
<ion-item>
<label for="{{resKeyFt}}">{{valueFeatures[i]}}</label>
<input id="{{resKeyFt}}" type="checkbox"
value="{{resKeyFt}}" name="{{resKeyFt}}" ngModel>
</ion-item>
</ion-col>