Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 一般来说,你如何解释有序映射?_Symfony_Collections_Doctrine_Ordered Map - Fatal编程技术网

Symfony 一般来说,你如何解释有序映射?

Symfony 一般来说,你如何解释有序映射?,symfony,collections,doctrine,ordered-map,Symfony,Collections,Doctrine,Ordered Map,我目前正在努力学习Symfony,其中很大一部分是教义。我一直在阅读教义的官方文件,在这一部分我偶然发现了一个叫做“有序地图”的东西。我试着在谷歌上搜索,但没有找到任何令人满意的答案。对于特定的语言(主要是Java和C++),只有一些答案,但我想从总体上理解它。它是如何工作的以及它是什么,因为在条令文档中,他们正在将它与ArrayCollection进行比较,所以我希望如果我能理解它是什么,我也会更容易理解ArrayCollection 我试图搜索诸如“什么是有序映射”或“有序映射解释”之类的内

我目前正在努力学习Symfony,其中很大一部分是教义。我一直在阅读教义的官方文件,在这一部分我偶然发现了一个叫做“有序地图”的东西。我试着在谷歌上搜索,但没有找到任何令人满意的答案。对于特定的语言(主要是Java和C++),只有一些答案,但我想从总体上理解它。它是如何工作的以及它是什么,因为在条令文档中,他们正在将它与ArrayCollection进行比较,所以我希望如果我能理解它是什么,我也会更容易理解ArrayCollection

我试图搜索诸如“什么是有序映射”或“有序映射解释”之类的内容,但正如我前面所说,我没有找到我要查找的内容。

当条目保持插入时的相同顺序时,有时称为有序映射

例如,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
将删除原始键并以数字形式重新索引。使用数字键进行序列化和反序列化可能会产生意外后果。还有一些其他的影响,有时是有益的,有时是令人惊讶或恼人的(或两者兼而有之)。您可以在和数组函数页面上阅读大量内容

在Doctrine的上下文中(因为它是用PHP编写的),这意味着一个集合(其中值是实体对象)可以按照您想要的任何方式进行排序(当然包括id),如果您迭代该集合,您将按照Doctrine添加实体对象的顺序(SQL/DQL查询的顺序)获取实体对象。条令还允许设置实体ID的键,同时仍保留SQL/DQL查询顺序。这可以简化代码,因为Doctrine的
集合实现了PHP的
ArrayAccess


作为一个反例,映射也可以是无序的或排序的,其中第一个意思是当您检索对时,顺序可以是随机的(在golang中,迭代映射时,起始索引是随机的,不知道这是否仍然是真的)或自动排序(如Java中的
SortedMap

因此,地图是一个可编辑的。如果它是有序的,那么元素的顺序取决于它们被添加的顺序,而不是php中的索引?@Ezircz,这是正确的。“如果它是有序的”可能会产生误导,默认情况下,它是一个有序映射,可以对其重新编制索引,在这种情况下,索引与顺序相同。