json_decode в PHP, гарантировал, что сохранил упорядочивание элементов при возврате массива?

Хотя я мог бы использовать оператор -, это уменьшило бы этот последний итератор в каждом цикле.

Нет, не будет. Он получит копию конечного итератора и уменьшит его. Это все. Это не изменит конечный итератор, сохраненный в списке.

Ваша основная проблема должна заключаться в проверке того, что список не пуст, что гарантирует существование --it-> end ().

7
задан double-beep 9 February 2019 в 18:43
поделиться

4 ответа

Разве в данном случае не имеет смысла использовать массив при передаче JSON в PHP. Если у вас нет ключей объекта в JSON (которые в PHP становятся ключами ассоциативного массива), просто отправьте его как массив. Таким образом, вам будет гарантировано, что они будут располагаться в том же порядке в PHP, что и в javascript.

json_decode('{["foo", "bar", "baz"]}');
json_decode('["foo", "bar", "baz"]'); //I think this would work

Если вам нужны ассоциативные массивы (именно поэтому вы передаете второй аргумент как true ), у вас будет придумать способ поддерживать свой порядок при прохождении. Вам нужно будет выполнить некоторую пост-обработку полученного массива после того, как вы его декодируете, чтобы отформатировать его так, как вы хотите.

$json = '{[ {"key" : "val"}, {"key" : "val"} ]}';
json_decode($json, true);
4
ответ дан 7 December 2019 в 07:50
поделиться

В отсутствие явного утверждения я бы сказал, что по определению явный порядок не сохраняется.

Моя основная мысль: какой именно порядок это будет сохраняться? Функция json_decode принимает строковое представление литерала объекта javascript в качестве аргумента, а затем возвращает либо объект, либо массив. Вход функции (литерал объекта в виде строки) не имеет явного упорядочивания, что означает отсутствие четкого порядка, который должна поддерживать функция json_decode.

1
ответ дан 7 December 2019 в 07:50
поделиться

Я использовал json_decode () несколько раз, и порядок результатов не изменился в клиентских приложениях PHP. Но с Python, например, он не сохраняет порядок.

Один из способов успокоиться - это протестировать его на нескольких примерах.

1
ответ дан 7 December 2019 в 07:50
поделиться

Лично я никогда не доверял какой-либо системе возвращать точный порядок, если этот порядок не определен специально. Если вам действительно нужен порядок, то используйте словарь, известный как двумерный массив, и назначьте разовое значение (0,1,2,3 ...) каждому значению в списке.

Если вы примените это правило ко всему, вы мне никогда не придется беспокоиться о доставке / хранении этого массива, будь то XML, JSON или база данных.

Помните, если что-то происходит определенным образом, это не означает, что это происходит намеренно. Это похоже на то, что строки в базе данных имеют порядок, хотя на самом деле это не так, если вы не используете предложение ORDER BY. Небезопасно думать, что ID 1 всегда предшествует ID 2 в SELECT.

1
ответ дан 7 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

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