Вопрос по arrays, php, dictionary – Упорядочены ли PHP-ассоциативные массивы?

55

Я пришел из фона Python и похожий тип данных Python (словарь) являетсяunordered набор пар ключ-значение.

Мне интересно, являются ли 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

Я поднял вопрос об отсутствии документации наbugs.php.net/bug.php?id=76119 и получается, что порядок всегда является порядком, в который ключи были добавлены в массив (изменение только значения элемента массива не меняет порядок массива). Спецификацию языка можно найти по адресуgithub.com/php/php-langspec/blob/master/spec/12-arrays.md Mikko Rantalainen
Некоторые из этих ответов относятся к руководству по PHP, в котором говорится, что массивы упорядочены. Но это совсем не отвечает на первоначальный вопрос. То, что спрашивали, было то, что (порядок по умолчанию)is! Порядок по умолчаниюappears быть порядком, в котором присваиваются элементы, но где в документации указано, что мы можем рассчитывать на это от одной версии к другой? flymike

Ваш Ответ

3   ответа
51

are orderedи 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
)

Из документации:

An array in PHP is actually an ordered map. A map is a type that associates values to keys. This type is optimized for several different uses; it can be treated as an array, list (vector), hash table (an implementation of a map), dictionary, collection, stack, queue, and probably more. As array values can be other arrays, trees and multidimensional arrays are also possible.

1

Руководство по PHP:

Arrays are ordered. The order can be changed using various sorting functions. See the array functions section for more information.

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

7

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

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

этот ответ верен, но он кажется бесполезным снисходительным ...
@ dm03514 Я не уверен, что понял тебя. Но все массивы в PHP на самом деле являются ассоциативными массивами. Надеюсь, это поможет.
@mikegreiling согласился, изменился. Спасибо!
Конечно, я прочитал первую статью, но все еще был в замешательстве. Я понимаю, что если у меня есть массив $ test = («foo», «bar»), то он упорядочен: $ test [0] - это foo, $ test [1] - это бар. Но когда у меня есть ассоциативный массив, ключи не численно упорядочены. $ test ['a'; test & apos;] теперь находится на первом месте, но он не индексируется численно, он индексируется строкой, поэтому я запутался и написал. dm03514

Похожие вопросы