PHP проверяет, есть ли элемент в массиве

В настоящее время я пытаюсь создать универсальное приложение 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 сделал свое дело :)

$todo - это объект file, а не объект array. in_array поддерживает массив в качестве входа во втором параметре
VinuBibin 26.07.2018 10:15

Пожалуйста, проверьте эту ссылку stackoverflow.com/questions/9059026/…

VinuBibin 26.07.2018 10:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
178
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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);
}


}

Другие вопросы по теме