… чем ассоциативные массивы?
У ассоциативных массивов больше памяти или что-то еще?
$arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the array become associative here?
Короче говоря, PHP не имеет неассоциативных массивов.
@Sectus опубликовал хороший ответ на базовую реализацию массивов PHP. Часто бывает полезно понять, что происходит «под капотом». Но независимо от их основной реализации массивы PHP подвергаются PHP-разработчику как упорядоченная карта значений, связанных с ключами (т. Е. Связанный массив). Всегда.
Из PHP: Массивы – Руководство
Массив в PHP на самом деле является упорядоченной картой. Карта – это тип, который связывает значения с ключами.
а также
Массивы PHP могут содержать целые и строковые ключи одновременно с тем, что PHP не различает индексированные и ассоциативные массивы.
а также
Ключ может быть целым числом или строкой.
Заблуждение о том, что массивы численно индексируются, вызвано тем, что целые ключи автоматически увеличиваются в удобстве, в случае, когда ключ не указан явно.
Но обратите внимание, что даже когда все ключи являются целыми числами, на PHP нет гарантии, что элемент существует, например, $ arr [0], который, насколько мне известно, предоставляется на любом другом языке, который использует индексированные массивы (т. Е. При условии, что индексированные массив содержит хотя бы один элемент и основан на 0).
Это не тривиальное дифференцирование. Программисты IMHO, которые полагаются на массивы PHP, которые ведут себя как индексированный массив, не задумываясь о потенциальных последствиях или понимании разницы *, могут устанавливать себя (или будущих сопровождающих) для странного / неожиданного поведения.
* Я квалифицировал это, так как есть очевидные случаи, когда обоснованное решение воспользоваться преимуществами индексируемого удобства / особенностей языка PHP вокруг массивов может обеспечить выгоду.
Массив в PHP всегда представляет собой таблицу хешей. Вы можете прочитать эту статью @NikiC.
В принципе, все в PHP является хэш-таблицей. В основной реализации массивов PHP используются не только таблицы хэша, они также используются для хранения свойств объекта, его методов, функций, переменных и почти всего остального.
Если ключи идут поочередно с нуля, это выглядит как индексированный массив, но на самом деле это не так.
Также эта статья будет полезна.
Массивы PHP – это массивы, словари и связанные списки в одно и то же время, что обязательно требует много информации
Все массивы PHP являются ассоциативными. У PHP нет «списков», как это делают некоторые другие языки. Числовые индексированные массивы представляют собой просто ассоциативные массивы с числовыми ключами. Цифровые клавиши несколько особенны в том, что их можно опустить при добавлении элементов, заставляя PHP автоматически индексировать эти элементы. Внутренне числовые индексы могут использовать или не использовать другой тип индекса (не уверен, посмотрите на источник, если хотите), но они используют один и тот же механизм, они не представляют собой совершенно другой тип массива с различными характеристиками производительности.
В этом случае массив становится ассоциативным. Все массивы PHP являются своего рода ассоциативными массивами и реализованы как хэш-таблица.