当条目保持与插入时相同的顺序时, 有时称为有序映射。
例如,PHP 中的数组是有序的(保留插入顺序)。所以创建/修改这样的数组:
$array = [2 => 'a', 1 => 'b'];
$array[0] = 'c';
确实会产生 PHP 数组[2 => 'a', 1 => 'b', 0 => 'c']
——它保留了插入顺序——而在其他一些语言中它会变成[0 => 'c', 1 => 'b', 2 => 'a']
.
这会影响一些操作。遍历数组 withforeach
将按插入顺序返回条目。您可以对 PHP 数组进行 key-wise 或 value-wise 排序,默认排序功能sort
将删除原始键并以数字方式重新索引。使用数字键进行序列化和反序列化可能会产生意想不到的后果。还有一些其他的效果有时是有益的,有时是令人惊讶或烦人的(或两者兼而有之)。您可以在PHP 的数组文档页面和数组函数页面上阅读大量内容。
在 Doctrine 的上下文中(因为它是用 PHP 编写的),这意味着可以以任何你想要的方式对值是实体对象的集合进行排序(当然包括 id),如果你遍历那个集合,你会得到实体对象按原则添加的顺序(SQL/DQL 查询的顺序)。Doctrine 还允许将键设置为实体的 id,同时仍保留 SQL/DQL 查询顺序。这可以简化代码,因为 DoctrineCollection
实现了 PHP 的ArrayAccess
.
作为一个反例,地图也可以是无序或排序的,其中第一个意味着当您检索对时,顺序可以是随机的(在 golang 中,开始索引在遍历地图时曾经是随机的,不知道这是否是仍然正确)或自动排序(如SortedMap
在 Java 中)。