12

可能重复:
PHP 关联数组是否已排序?

如果我将项目添加到具有不同键的关联数组中,是否保留了添加顺序?如何访问给定元素的“上一个”和“下一个”元素?

4

2 回答 2

16

是的,php 数组有一个隐含的顺序。使用reset,nextprev-current或只是一个foreach循环- 来检查它。

于 2012-07-14T21:03:50.890 回答
16

是的,它确实保留了订单。您可以将 php 数组视为有序哈希映射

您可以将元素视为按“索引创建时间”排序。例如

$a = array();
$a['x'] = 1;
$a['y'] = 1;
var_dump($a); // x, y

$a = array();
$a['x'] = 1;
$a['y'] = 1;
$a['x'] = 2;
var_dump($a); // still x, y even though we changed the value associated with the x index.

$a = array();
$a['x'] = 1;
$a['y'] = 1;
unset($a['x']);
$a['x'] = 1;
var_dump($a); // y, x now! we deleted the 'x' index, so its position was discarded, and then recreated

总而言之,如果您要添加一个数组中当前不存在键的条目,则该条目的位置将是列表的末尾。如果您要更新现有键的条目,则位置不会改变。

foreach使用上面演示的自然顺序遍历数组。你也可以使用next () current () prev () reset () 和朋友,如果你喜欢的话,尽管自从 foreach 被引入语言以来它们很少使用。

此外,print_r () 和var_dump () 也使用自然数组顺序输出它们的结果。

如果你熟悉 java,LinkedHashMap 是最相似的数据结构。

于 2012-07-14T21:10:41.853 回答