Карта иногда называется упорядоченной , когда записи остаются в той же последовательности, в которой они были вставлены.
Например, массивы в PHP упорядочены (сохранить порядок вставки). Таким образом, создание / изменение массива следующим образом:
$array = [2 => 'a', 1 => 'b'];
$array[0] = 'c';
действительно приведет к массиву PHP [2 => 'a', 1 => 'b', 0 => 'c']
- он сохранит порядок вставки - в то время как в некоторых других языках он будет превращен в [0 => 'c', 1 => 'b', 2 => 'a']
.
Это влияет на несколько операций. Итерация по массиву с foreach
вернет записи в порядке вставки. Вы можете выполнять сортировку по ключам или по значениям для массивов PHP, функция сортировки по умолчанию sort
будет отбрасывать исходные ключи и переиндексировать численно. Сериализация и десериализация с помощью числовых ключей c могут иметь непредвиденные последствия. И некоторые другие эффекты, которые иногда полезны, а иногда удивляют или раздражают (или оба). Вы можете прочитать его в массиве PHP do c page и страницах функций массива.
В контексте Doctrine (поскольку он записан в PHP) это означает, что коллекция, в которой значения являются объектами сущностей, может быть отсортирована любым способом, который вы хотите (включая, конечно, id), и если вы выполните итерацию по этой коллекции, вы получите объекты сущностей в порядке, в котором они были добавлены doctrine (порядок запроса SQL / DQL). Doctrine также позволяет устанавливать ключи для идентификаторов сущностей, сохраняя при этом порядок запросов SQL / DQL. Это может упростить код, поскольку Doctrine Collection
реализует PHP ArrayAccess
.
В качестве контрпримера карты также могут быть неупорядоченными или отсортированными, где первое означает, что при извлечении пар порядок может быть случайным (в golang начальный индекс был случайным при итерации по картам , не знаю, если это все еще верно) или автоматически сортируется (как SortedMap
в Java).