Я исхожу из фона 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
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 на самом деле является упорядоченной картой . Карта – это тип, который связывает значения с ключами. Этот тип оптимизирован для нескольких различных применений; он может рассматриваться как массив, список (вектор), хеш-таблица (реализация карты), словарь, коллекция, стек, очередь и, возможно, больше. В качестве значений массива могут быть другие массивы, также возможны деревья и многомерные массивы.
В документации указано:
An array in PHP is actually an ordered map.
Так что да, они всегда приказаны. Массивы реализуются как хеш-таблица .
Из руководства по php :
Массивы упорядочены. Заказ можно изменить с помощью различных функций сортировки. Дополнительную информацию см. В разделе функций массива .
Я полагался на то, что их заказывают, и он работал последовательно в каждом проекте, который у меня был.