Являются ли PHP Ассоциативные массивы заказаны?
Я исхожу из фона python, и тип данных python, который является похожим (словарь), представляет собой набор неупорядоченных пар значений ключа.
Мне интересно, неупорядочен ли набор ассоциативных массивов PHP? Кажется, что они заказаны.
$test = array(
'test' => 'test',
'bar' => 'bar',
);
var_dump($test);
var_dump(array_slice($test, 0, 1));
Тест всегда приходит перед баром, и я могу нарезать этот массив, как вы видите. Так это всегда гарантируется, что вы заказываете через php-версии? Является ли заказ только тем порядком, с которым я объявил массив? Итак, что-то внутренне указывает "тест" на размещение [0] в массиве? Я прочитал http://php.net/manual/en/language.types.array.php, но он не проливает слишком много света на эту проблему. Я ценю ваши ответы. Ty
Ответы
Ответ 1
упорядочиваются ассоциативные массивы 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
)
Из документации:
Массив в PHP на самом деле является упорядоченной картой. Карта - это тип, который связывает значения с ключами. Этот тип оптимизирован для нескольких различных применений; он может рассматриваться как массив, список (вектор), хеш-таблица (реализация карты), словарь, коллекция, стек, очередь и, возможно, больше. В качестве значений массива могут быть другие массивы, также возможны деревья и многомерные массивы.
Ответ 2
В документации указано:
An array in PHP is actually an ordered map.
Так что да, они всегда приказаны. Массивы реализуются как хэш-таблица .
Ответ 3
Из php manual:
массивы упорядочены. Заказ можно изменить с помощью различных функций сортировки. Подробнее см. В разделе функции массива.
Я полагался на то, что они упорядочены, и он работал последовательно в каждом проекте, который у меня был.