PHP检查数组中的项目

时间:2018-07-26 08:11:33

标签: php file conditional file-exists

我目前正在尝试构建通用的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 做到了:)

4 个答案:

答案 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>