PHP关联数组是有序的吗?

h6my8fg2  于 2023-05-16  发布在  PHP
关注(0)|答案(5)|浏览(170)

我来自python背景,python数据类型类似(字典)是一个无序的键值对集合。
我想知道PHP的关联数组是否是无序的?他们似乎被命令。

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

var_dump($test);    

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

Test总是在bar之前,我可以像你看到的那样对这个数组进行切片。所以这总是保证在php版本之间有序吗?这个顺序是否就是我声明数组的顺序?所以有什么东西在内部指向'test'来将[0]放置在数组中?我读过http://php.net/manual/en/language.types.array.php,但它并没有在这个问题上阐明太多。感谢你的回复。泰

tcbh2hod

tcbh2hod1#

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
)

From the documentation:
PHP中的数组实际上是一个有序Map。Map是一种将值与键关联的类型。这种类型针对几种不同的用途进行了优化;它可以被视为数组、列表(向量)、哈希表(Map的实现)、字典、集合、堆栈、队列,以及可能更多。由于数组值可以是其他数组,树和多维数组也是可能的。

uwopmtnx

uwopmtnx2#

documentation声明:

An array in PHP is actually an ordered map.

是的,他们总是被命令。数组被实现为hash table

rdlzhqv9

rdlzhqv93#

关于php manual
Arrays已订购。可以使用各种排序函数来更改顺序。有关详细信息,请参阅array functions部分。
我一直依赖的事实是,他们是有序的,它一直在工作,在每一个项目,我有。

ep6jt1vc

ep6jt1vc4#

数组是有序的,但这并不意味着键是有序的,这意味着它们是按照 * 给定 * 的顺序。其中没有指定精确的顺序,但它看起来是您在其中引入键值对的顺序。
为了理解它,想想不被命令意味着什么?我们来考虑一下关系数据库中的一个关系。一个关系不是 * 内在 * 有序的:当你通过查询访问数据库时,除非你提供一个order子句,否则数据库可以以任何顺序返回相同的数据。即使数据没有被修改,相同的数据也可以以不同的顺序返回。

umuewwlo

umuewwlo5#

这不是一个简单的问题。在这种情况下,文档建议开发中的非显而易见的点,例如:

$a = [0 => 'first', 1 => 'second', 3 => 'fourth'];
$a[2] = 'third';
foreach ($a as $element) print($element . "\n");

常识告诉我们,当迭代这个数组时,我们会看到'third'作为第三个元素,但这不是真的:

first
second
fourth
third

因为元素是按照它们被添加的顺序存储的,0-1-2-3只是一个键,而不是顺序。通常,文档假设数组的元素具有某种顺序,这在文档中明确说明,这意味着您货车:第一个元素、n个元素、最后一个元素。但显然不可能直接操作它们。也就是说,你可以得到最后一个元素,添加到末尾(push/pop),你可以得到第一个- shift,你可以迭代它们(foreach),但是你不能在没有任何代码的情况下得到n个元素,或者在没有额外代码的情况下将一个元素放置在某个位置。那么,问题是-我们如何能够依靠这个命令,如果它是出于任何原因需要的。

相关问题