Является ли PHP единственным популярным языком, который объединяет простые и ассоциативные массивы в один тип?

#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 массивы по умолчанию являются числовыми, они могут пропускать индексы, подразумевая, что даже числовые массивы по своей сути все еще ассоциативны.