PHP 关联数组是有序的吗?

2022-08-30 08:30:54

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

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

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

var_dump($test);    

var_dump(array_slice($test, 0, 1));

测试总是在酒吧之前,我可以像你看到的那样切开这个数组。那么,这是否总是保证跨php版本排序?顺序是否只是我声明数组时使用的顺序?所以有些东西在内部指向“test”以将[0]放在数组中?我已经读过 http://php.net/manual/en/language.types.array.php 但它并没有对这个问题有太多的了解。我感谢您的回复。泰


答案 1

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

此外,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中的数组实际上是一个有序映射。映射是将值与键相关联的类型。这种类型针对几种不同的用途进行了优化;它可以被视为数组,列表(向量),哈希表(映射的实现),字典,集合,堆栈,队列等等。由于数组值可以是其他数组,因此树和多维数组也是可能的。


答案 2

文档指出:

An array in PHP is actually an ordered map.

所以,是的,它们总是有序的。数组作为哈希表实现。