Хотя я мог бы использовать оператор -, это уменьшило бы этот последний итератор в каждом цикле.
Нет, не будет. Он получит копию конечного итератора и уменьшит его. Это все. Это не изменит конечный итератор, сохраненный в списке.
Ваша основная проблема должна заключаться в проверке того, что список не пуст, что гарантирует существование --it-> end ().
Разве в данном случае не имеет смысла использовать массив при передаче 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);
В отсутствие явного утверждения я бы сказал, что по определению явный порядок не сохраняется.
Моя основная мысль: какой именно порядок это будет сохраняться? Функция json_decode принимает строковое представление литерала объекта javascript в качестве аргумента, а затем возвращает либо объект, либо массив. Вход функции (литерал объекта в виде строки) не имеет явного упорядочивания, что означает отсутствие четкого порядка, который должна поддерживать функция json_decode.
Я использовал json_decode () несколько раз, и порядок результатов не изменился в клиентских приложениях PHP. Но с Python, например, он не сохраняет порядок.
Один из способов успокоиться - это протестировать его на нескольких примерах.
Лично я никогда не доверял какой-либо системе возвращать точный порядок, если этот порядок не определен специально. Если вам действительно нужен порядок, то используйте словарь, известный как двумерный массив, и назначьте разовое значение (0,1,2,3 ...) каждому значению в списке.
Если вы примените это правило ко всему, вы мне никогда не придется беспокоиться о доставке / хранении этого массива, будь то XML, JSON или база данных.
Помните, если что-то происходит определенным образом, это не означает, что это происходит намеренно. Это похоже на то, что строки в базе данных имеют порядок, хотя на самом деле это не так, если вы не используете предложение ORDER BY. Небезопасно думать, что ID 1 всегда предшествует ID 2 в SELECT.