В настоящее время я пытаюсь создать универсальное приложение 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);
}
Моя проблема в том, что условная ветвь, в которой я проверяю, установлена ли уже задача и записана ли она в файл, если (in_array ($ задача, $ задача)), не работает, та же задача продолжает добавляться.
Спасибо за ответы, флаг FILE_IGNORE_NEW_LINES сделал свое дело :)
Пожалуйста, проверьте эту ссылку stackoverflow.com/questions/9059026/…






file возвращает строки в файле, включая завершающие разрывы строк, поэтому они не будут соответствовать отправляемой строке (если, конечно, она также не содержит разрыв строки).
Самый простой способ избежать этого - использовать флаг FILE_IGNORE_NEW_LINES:
$todo = file('todo.txt', FILE_IGNORE_NEW_LINES);
Используйте FILE_IGNORE_NEW_LINES. Возвращаемый файл массива содержит символ новой строки в конце каждого значения.
Я предлагаю использовать файл json вместо файла txt. который предоставит вам все функции массива без каких-либо проблем.
просто измените после того, как файл уже существует
if (file_exists("var/www/html/todo/todo.txt")) {
$todo_txt= file_get_contents("todo.txt");
if ( ! in_array($some_text_came_from_any_where, $todo_txt) ) {
file_put_contents("$new_text_here", $todo_txt, FILE_APPEND);
}
}
$todo- это объектfile, а не объектarray.in_arrayподдерживает массив в качестве входа во втором параметре