在数组上进行迭代时,PHP中的foreach应该遵循的顺序是什么?

时间:2019-05-31 18:48:56

标签: php arrays foreach

我知道PHP数组不是一个数组,它实际上是一个有序的哈希表,但是对于我为什么运行此代码仍然没有意义:

<?php

$teste = [];
$teste[2] = 'Test 2';
$teste[1] = 'Test 1';
$teste[3] = 'Test 3';

foreach ($teste as $t) {
    echo $t;
}

它打印以下内容:

Test 2
Test 1
Test 3

结果对我来说没有意义,不应该像这样订购

Test 1
Test 2
Test 3

1 个答案:

答案 0 :(得分:0)

All arrays in PHP are actually ordered maps。因此,在映射中遇到键-值对的顺序将主要取决于将键-值对添加到映射中的顺序。严格按照递增顺序使用0..n-1索引序列的数组只是一种特殊情况。您可以通过以下操作对此进行测试:

$my_arr = array();
$my_arr[3] = 'd';
$my_arr[1] = 'b';
$my_arr[2] = 'c';
$my_arr[0] = 'a';

// #1
echo json_encode($my_arr, JSON_PRETTY_PRINT) . "\n";

// #2
ksort($my_arr);
echo json_encode($my_arr, JSON_PRETTY_PRINT);

#1的输出:

{
    "3": "d",
    "1": "b",
    "2": "c",
    "0": "a"
}

#2的输出:

[
    "a",
    "b",
    "c",
    "d"
]

请注意,$my_arr的两个版本之间的唯一区别是键的顺序。数组被乱序编码为一个对象,但顺序被编码为一个简单数组。

请查看文档的链接部分,以获取有关PHP数组的更多信息。这已经是该语言的有据可查的功能。如果您希望键的排序顺序严格增加,请使用ksort(),如上面的示例所示。