Удаление данных JSON с помощью запросов PHP и POST

Мне нужен PHP-код, который удаляет что-то из файла JSON с помощью PHP, например:

скажем, у меня есть этот файл JSON:

{
     "aaa": [
         {
             "title": "xx",
             "description": "6",
         },
         {
             "title": "tt",
             "description": "b",
         }
     ]
}

Поэтому я хочу, чтобы он получил строку через POST, а затем удалил всю часть JSON, которая имеет строку, указанную через POST.

Например, предположим, что я отправляю «xx» через запрос POST, после запуска сценария PHP я хочу, чтобы JSON выглядел так, без того, который был удален:

{
     "aaa": [
         {
             "title": "tt",
             "description": "b",
         }
     ]
}

Я пробовал все, что нашел, искал в Интернете, но не мог сделать ничего, что делало бы это правильно. Заранее спасибо!

Я ЗНАЮ, ЧТО ЕСТЬ МНОГО ВОПРОСОВ И ОТВЕТОВ, ПОДОБНЫХ ЭТОМ, НО НИ ОДИН ИЗ НИХ НЕ ПОЛЕЗИЛ ДЛЯ МЕНЯ, ПОЭТОМУ Я ПРОСИМ СЕБЯ, НЕ ТРЕБУЕТСЯ Пометить ЭТО как ДУБЛИКАТ, ЕСЛИ ВЫ ЗНАЕТЕ, КАК ЭТО СДЕЛАТЬ, ОТВЕТИТЕ ЕЙ , ЕЩЕ...

Не могли бы вы дать ссылку на эти другие вопросы / ответы и объяснить, почему они не помогли? Это сэкономит время в будущем. Также покажите, что вы пробовали

Phil 24.10.2018 00:52

На самом деле вы просто хотите отфильтровать массив по свойству title каждого объекта. Это должно помочь, а если нет, объясните, как ~ Как отфильтровать массив объекта?

Phil 24.10.2018 00:55
Стоит ли изучать 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 и хотите разрабатывать...
3
2
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Что ты хочешь сделать, так это ...

  1. Разберите файл JSON в структуру данных PHP с помощью file_get_contents() и json_decode()
  2. Отфильтруйте массив aaa по заголовку, удалив записи, соответствующие вашим данным POST, с помощью array_filter()
  3. Запишите измененную структуру данных обратно в файл в виде строки JSON, используя json_encode() и file_put_contents().

Вот пример

$file = 'path/to/file.json';
$data = json_decode(file_get_contents($file));
$title = trim($_POST['title']); // assuming this is all checked / validated / etc
$data->aaa = array_values(array_filter($data->aaa, function($item) use ($title) {
    return (bool) strcmp($item->title, $title); // returns 0 if strings match
}));
file_put_contents($file, json_encode($data));

Демо ~ https://3v4l.org/60MoG

@ luclzzBR2252 Я только что добавил array_values, чтобы повторно проиндексировать отфильтрованный массив. В противном случае вы получите объект с цифровыми клавишами

Phil 24.10.2018 01:17

Это то, что я хотел сделать, но не знал, как объяснить

luclzzBR2252 24.10.2018 01:21

Я понимаю, что у вас есть принятый ответ, но с таким простым объектом json вы можете просто создать новый объект и добавить массив aaa с элементами, которые не соответствуют тому, который вы хотите удалить.

<?php

$file = '/path/to/your/file';

// Delete this one
$_POST['delete'] = 'xx';

// Get file contents and decode it
$str = file_get_contents( $file );
$json = json_decode( $str );

// Create a new object
$temp = new stdClass;

// Add only the objects we want to keep
foreach( $json->aaa as $obj )
    if ( $obj->title != $_POST['delete'] )
        $temp->aaa[] = $obj;

// Replace the file contents
file_put_contents( 
    $file, 
    json_encode( $temp ) 
);

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