PHP关联数组是否有序?

PHP关联数组是否有序?,php,arrays,dictionary,Php,Arrays,Dictionary,我来自python背景,类似的python数据类型(字典)是一组无序的键值对 我想知道PHP关联数组是否无序?它们似乎是有序的 $test = array( 'test' => 'test', 'bar' => 'bar', ); var_dump($test); var_dump(array_slice($test, 0, 1)); 测试总是在条之前,我可以像你们看到的那个样切片这个数组。那么,这是否总是保证在php版本之间订购?这个顺序就是我声明数组的顺序吗

我来自python背景,类似的python数据类型(字典)是一组无序的键值对

我想知道PHP关联数组是否无序?它们似乎是有序的

$test = array(
  'test' => 'test',
  'bar' => 'bar',
);

var_dump($test);    

var_dump(array_slice($test, 0, 1));
测试总是在条之前,我可以像你们看到的那个样切片这个数组。那么,这是否总是保证在php版本之间订购?这个顺序就是我声明数组的顺序吗?那么有什么东西在内部指向“test”将[0]放置在数组中?我已经读过了,但它并没有对这个问题有太多的解释。我感谢你的回答。Ty

PHP关联数组(以及数字数组)是有序的,PHP提供了各种函数来处理数组键的排序,如,和

此外,PHP允许您按顺序声明带有数字键的数组:

$a = array(3 => 'three', 1 => 'one', 2 => 'two');
print_r($a);

Array
(
    [3] => three
    [1] => one
    [2] => two
)
// Sort into numeric order
ksort($a);
print_r($a);
Array
(
    [1] => one
    [2] => two
    [3] => three
)

PHP中的数组实际上是一个有序映射。映射是一种将值与键关联的类型。该类型针对多种不同用途进行了优化;可以将其视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等。由于数组值可以是其他数组,所以也可以使用树和多维数组

各国:

所以是的,它们总是被订购的。阵列是通过以下方式实现的。

我们已经订好了。可以使用各种排序功能更改顺序。有关更多信息,请参阅部分


我一直依赖于这样一个事实,即它们是有序的,并且在我所做的每个项目中都一直有效。

数组是有序的,但这并不意味着键是有序的,这意味着它们是按给定的顺序排列的。其中未指定精确顺序,但似乎是在其中引入键值对的顺序

要理解它,想想不被订购意味着什么? 我们考虑一下关系数据库中的关系。 关系本质上不是有序的:当您通过查询访问它时,除非您提供order子句,否则数据库可以以任何顺序返回相同的数据。
即使数据没有被修改,同样的数据也可以以不同的顺序返回。

当然,我读了第一句话,但我仍然感到困惑。我意识到如果我有一个$test=array('foo','bar'),它的顺序是$test[0]是foo,$test[1]是bar。但是当我有一个关联数组时,键不是按数字顺序排列的$test['test']现在放在第一位,但它不是数字索引,而是由字符串索引的,这就是为什么我感到困惑并发布了。@dm03514我不确定我是否理解您的意思。但是PHP中的所有数组实际上都是关联数组。“希望这能有所帮助。”米克格林同意了,改变了。谢谢这些答案中有几个涉及PHP手册,该手册规定数组是有序的。但这根本不能回答最初的问题。被问到的是(默认)顺序是什么!默认的顺序似乎是元素的分配顺序,但是文档中说明了我们可以从一个版本到下一个版本依赖的顺序是什么?我在上提出了一个关于缺少文档的问题,结果表明,顺序始终是键添加到数组中的顺序(仅更改数组元素的值不会更改数组的顺序)。可以在Python3.6及更高版本的中找到语言规范。它们是按顺序排列的。
An array in PHP is actually an ordered map.