Задать вопрос
@lolrofl01

Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

Добрый день.
Есть массив вида:
$arr = [
  'a' => 1,
  'b' => 2,
  'c' => 3
];


Я его превращаю в json (json_encode), и кладу в бд. Так фишка в том, что в бд порядок меняется, условно скажем, после того, как вытащишь из бд и превратишь обратно в массив, он уже принимает вот такой вид:
$arr = [
  'c' => 3
  'a' => 1,
  'b' => 2
];


Есть вариант сохранить порядок? Читал пару статей, пишут, что это нормальное поведение, мол так в бд оптимизируется json. Как-то это отключить можно? Или единственный вариант, это сохранять вместе с этим массивом массив $order и в нем прописывать ключи от А до Я в нужном порядке, затем в цикле опираться на этот массив?
  • Вопрос задан
  • 323 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
фишка в том, что в бд порядок меняется, условно скажем, после того, как вытащишь из бд и превратишь обратно в массив, он уже принимает вот такой вид

Согласно описанию формата, порядок элементов внутри объекта не существует (вернее, не определён), и его поддержание не гарантируется. В отличие от массива.
Так что если порядок важен, то каждая запись должна быть преобразована в отдельный объект, а все они - сложены в массив в нужном порядке, т.е. JSON должен выглядеть, например, так:
'[{"a":1}, {"b":2}, {"c":3}]'

Я его превращаю в json (json_encode), и кладу в бд.

Покажите точно, как выглядит этот JSON.
Покажите точный CREATE TABLE таблицы, в которую кладёте.
Покажите, как точно выглядит в таблице положенное туда JSON значение.
Покажите точно это же JSON значение после обратного извлечения.

Да, всё это - для одного и того же JSON.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
mysql порядок передаваемых значений по умолчанию не изменяет.
если тебе не нужен доступ через sql к значениям в json, то храни json строку в blob.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы