Какой порядок должен соблюдать foreach в PHP при итерации по массиву? - PullRequest
1 голос
/ 31 мая 2019

Я знаю, что массив 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 голосов
/ 31 мая 2019

Все массивы в PHP являются фактически упорядоченными картами .Таким образом, порядок, в котором пары ключ-значение встречаются на карте, будет зависеть главным образом от порядка, в котором они были добавлены на карту.Массивы с последовательностью индекса 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(), как показано в примере выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...