Intereting Posts
Выполнить код, когда модель Eloquent извлекается из базы данных Функции перестают работать, когда файл включен в корневой путь (ведущая косая черта) Каковы альтернативы архитектуре MVC для веб-разработки? Файл изображения, успешно загруженный с помощью приложения Google App Engine, не существует в ведре В чем разница между homeUrl и baseUrl в структуре Yii? Получение внутреннего HTML-элемента DomElement в PHP Перечислить NSDictionary с ключами и объектами, PHP-стиль Форма, которая делает переадресацию браузера при доступе посредством обычной формы или запроса Ajax – возможно ли это? PHP – Получить имя ключа для значения массива Как передать переменные на странице PHP на другую страницу без использования формы? SimpleXML: добавить одно дерево к другому как выполнить модульный вызов curl в php Как открыть файл на PHP, который имеет символы Unicode в его имени? Magento SOAP API – ошибка PHP Exception "выглядит так, как будто у нас нет XML-документа" Добавление или настройка функциональности установленных пакетов

Является ли порядок ассоциативного массива гарантированным в PHP?

Когда я выполняю цикл foreach над массивом associatve в php, порядок, в котором он выполняется, – это порядок, в котором он определен.

Например:

$arr = array("z" => "z", "a" => "a", "b" => "b"); foreach($arr as $key => val) print("$key: $val\n"); 

Выходы:

 z: z a: a b: b 

В то время как

 $arr = array("a" => "a", "b" => "b", "z" => "z"); 

Выходы:

 a: a b: b z: z 

Поэтому мой вопрос заключается в следующем: это поведение определено на уровне спецификации? Могу ли я иметь разумную уверенность в том, что это поведение не будет изменено в будущих версиях PHP?

Solutions Collecting From Web of "Является ли порядок ассоциативного массива гарантированным в PHP?"

Из руководства по PHP

Массив в PHP на самом деле является упорядоченной картой. Карта – это тип, который связывает значения с ключами. Этот тип оптимизирован для нескольких различных применений; он может рассматриваться как массив, список (вектор), хеш-таблица (реализация карты), словарь, коллекция, стек, очередь и, возможно, больше.

а также

Массивы упорядочены. Заказ можно изменить с помощью различных функций сортировки.

Поэтому вы можете быть уверены (по крайней мере в настоящее время), что заказ будет сохранен. Я был бы очень удивлен, если бы это поведение изменилось, потому что оно четко указано, и из-за этого будет огромное количество кода, который опирается на него.

Это никогда не изменится.

Поскольку массивы всегда упорядочены, а самый простой и быстрый способ итерации массива – переход от первого элемента к последнему (поэтому нет веских оснований для изменения поведения foreach ()), вы можете быть достаточно уверены, что это поведение не изменится.

Ваши вопросы выглядят так, как будто вы пришли из программирования на Perl, где «массивы» не гарантированы в том порядке, в котором вы их создали. Но в PHP он всегда был заказан и всегда будет, иначе много кода сломается.