@HabrDima20

Как добавить в массив с json строкой еще одну строку?

array:1 [▼
  0 => "[{"title":"sdsvgnh","thumbnail":"1603649879-FDaTd.jpg","descriptions":"dfbgnhm,"}]"
]


есть массив в БД, как передать данные в этот массив при каждом добавление данных, может быть много данных?
Данные это строка json

$title = $request->title;
        $imageName = ImageGenerator::imageDescriptions($request->file('photo'));
        $description = $request->description;
        $descriptionJson =  json_encode([
            [
                'title' => $title,
                'thumbnail' => $imageName,
                'descriptions' => $description,
            ]
       ]);
        $product->descriptions = $descriptionJson;
        $product->save();



Вот пример что я хочу

[
{"title":"Assumenda eaque et facilis minima.","descriptions":"Ut voluptas cumque officia dolor est. Ut corrupti impedit blanditiis voluptas eligendi magnam ipsa eum. Non ipsa excepturi velit velit corrupti iure qui.","thumbnail":"1603372615-kEkJV.jpg"},
{"title":"Nihil rem id autem non cumque.","descriptions":"In quia ad ea temporibus eveniet. Quis sit et ea autem et. Ipsam ut quia possimus doloribus voluptatem. Omnis sed accusamus voluptatem non consequatur accusantium cupiditate. Et quia nobis odio est occaecati debitis animi dolorem. Aut et qui numquam et. Officiis id aut ex.","thumbnail":"1603372615-kEkJV.jpg"},
{"title":"Inventore quo doloribus cum voluptas tenetur praesentium.","descriptions":"Nesciunt et eius quis voluptas. Sit incidunt nihil ab enim.","thumbnail":"1603372615-kEkJV.jpg"}
]
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
Не совсем понятно, что вы хотите сделать в итоге. Если вы добавляете какие-то данные в массив, то вы должны его сначала получить, а при добавлении проверять, нет ли в нем уже таких же данных, которые вам прилетают в $request. Обычно это делается по id или slug, но у вас ни того, ни другого нет, поэтому для примера соберем все заголовки $titles из полученного массива:

$descriptionJson = json_decode(file_get_contents($path), true);

$titles = array();
foreach ( $descriptionJson as $key => $descriptionJsonValue ) {
	$titles[] = $descriptionJsonValue['title'];
}


Теперь, видимо, вы делаете какой-то запрос и получаете ответ в виде объекта. Назову его $requests. Вам нужно получить кол-во элементов, чтобы добавлять новые с id+1 и проверять наличие заголовка в уже существующих данных:

$count = count($requests); // получаем кол-во объектов для ключа

foreach ( $requests as $key => $request ) {
	if ( array_search($request->title, $titles) == false ) {
		$count++;

		$descriptionJson[$count]['title'] = $request->title;
		$descriptionJson[$count]['thumbnail'] = ImageGenerator::imageDescriptions($request->file('photo'));
		$descriptionJson[$count]['descriptions'] = $request->description;

	}
}

$product->descriptions = json_encode($descriptionJson);
$product->save();
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@FanatPHP
Чебуратор тега PHP
Не хранить никакой джейсон в БД
Добавлять строку в таблицу обычным порядком, запросом INSERT
Ответ написан
7workers
@7workers
какая БД ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 дек. 2020, в 23:18
80000 руб./за проект
01 дек. 2020, в 22:41
60000 руб./за проект
01 дек. 2020, в 21:24
500 руб./за проект