Упорядочены ли ассоциативные массивы 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 но это не проливает слишком много света на этот вопрос. Я ценю ваши ответы. Тай

3   51   2012-06-06 17:01:03

3 ответа:

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 на самом деле упорядоченный карта. Карта-это тип, который связывает значения с ключами. Этот тип оптимизирован для нескольких различных применений; он может рассматриваться как массив, список (вектор), хэш-таблица (реализация карты), словарь, коллекция, стек, очередь и, вероятно, больше. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы.

на документация гласит:

An array in PHP is actually an ordered map.

Так что да, они всегда упорядочены. Массивы реализуются как хэш-таблицы.

с php manual:

массивы прикажут. Порядок может быть изменен с помощью различных функций сортировки. Смотрите функции для работы с массивами для получения дополнительной информации.

я полагался на то, что они упорядочены, и он работал последовательно в каждом проекте, который у меня был.