PHP关联数组是否已订购?

时间:2012-06-06 13:01:04

标签: php arrays dictionary

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

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

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

var_dump($test);    

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

测试总是在bar之前进行,我可以按照你的意愿切片。那么这总是保证在php版本之间订购吗?订单只是我声明数组的顺序吗?所以有些内部指向'test'将[0]放在数组中?我读过http://php.net/manual/en/language.types.array.php,但它并没有对这个问题有太多了解。感谢您的回复。 TY

4 个答案:

答案 0 :(得分:52)

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

此外,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
)

krsort()

  

PHP 中的数组实际上是有序地图。映射是将值与键关联的类型。此类型针对多种不同用途进行了优化;它可以被视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多。由于数组值可以是其他数组,因此树和多维数组也是可能的。

答案 1 :(得分:8)

documentation州:

An array in PHP is actually an ordered map.

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

答案 2 :(得分:1)

来自php manual

  

Arrays已订购。可以使用各种排序功能更改订单。有关详细信息,请参阅array functions部分。

我依赖于这样一个事实,即它们已被订购,并且在我曾经拥有的每个项目中都能保持一致。

答案 3 :(得分:0)

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

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