#php #arrays #programming-languages
#php #массивы #программирование-языки
Вопрос:
Я провожу исследование PHP и задаюсь вопросом, существуют ли другие часто используемые языки программирования, которые используют ассоциативный массив как для простого хранения индексированных элементов, так и для функциональности ключ-значение. Делает ли это PHP уникальным в этом смысле?
Комментарии:
1. AFAIK, Lua использует «таблицы» как для списков, так и для dicts.
Ответ №1:
JavaScript делает то же самое — см. Массивы в MDN.
Комментарии:
1. Сделал тест с JS ideone.com/K3t3tB Обработка массивов как ассоциативных массивов для меня не работает. Я делаю это неправильно?
2. Также думал о JS, но, похоже
array
, в нем вообще отсутствует тип ( скрипка ), где, поскольку PHP различаетarray
иobject
3. В Javascript эквивалентом ассоциативных массивов являются объекты. Или объекты концептуальных значений (объекты, содержащие только значения вместо методов).
4. @Flosculus немного запутался. Итак, JS не объединяет простые и ассоциативные массивы в один тип или это
5. Я все еще не убежден. Читая стандарт ECMA , они говорят только о » объектах массива «, где массив — это особый вид объекта, а не что-то еще. Это объясняет, почему
typeof
возвращает object . И поэтому я бы сказал, что JS (или диалект ECMAScript, если на то пошло) в данном случае не равен PHP.
Ответ №2:
http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/associative-arrays.html
Actionscript также, но то же самое можно ожидать от любого диалекта Ecmascript.
РЕДАКТИРОВАТЬ: AS3 использовал более строгий подход.
Что касается JS:
Объект в JS может иметь свойство с числовым именем {0:'value'}
.
Разница в том, что вы можете получить к нему доступ только как к массиву obj[0]
, тогда {'name':'value'}
как к нему можно получить доступ как obj.name
или obj['name']
.
Массивы действительно существуют в JS, но они только численно индексируются, но и объекты, и массивы могут обрабатываться одинаково for loop
, например, в a .
Комментарии:
1. Неправильный пример. В AS3 есть два разных типа: ассоциативные массивы (описанные в вашей ссылке) и простые массивы
2. Но вы можете заставить ассоциативный массив / карту / словарь вести себя как массив практически на любом языке, используя целочисленные значения в качестве ключей для значений. Чем это отличает JS? В любом случае спасибо.
3. В этом отношении PHP также не сильно отличается, вы все равно можете перебирать общедоступные свойства объектов. Хотя в PHP массивы по умолчанию являются числовыми, они могут пропускать индексы, подразумевая, что даже числовые массивы по своей сути все еще ассоциативны.