Что необходимо для того, чтобы массив можно было считать ассоциативным?
В википедии говорится, что ассоциативный массив, это тот, у которого есть ключ и значение.
И в PHP и в JavaScript у каждого элемента массива есть ключ. Означает ли это, что и в PHP и в JavaScript все массивы являются ассоциативными?
В книжке Котерова по PHP, автор пишет, что "строго говоря", все массивы в PHP являются ассоциативными, ведь у всех элементов есть ключ.
В JavaScript тоже у всех элементов массива есть ключ, но почему-то ассоциативным его не называют, возможно потому, что в качестве индекса могут быть только числа.
А если в JS хочется в ключах использовать строки, то нужно использовать объекты.
Я не силен в других языках, и образования нет соответствующего.
Подскажите, существуют ли ЯП, в которых у элементов массива может и не быть ключа? Если так, то какой в них смысл, если мы не можем получить определенное значение (ключа ведь нет)?
Есть языки, в которых в качестве ключа может быть ссылка на функцию.
Также ключом может быть ссылка на объект.
Причем, можно сделать пару ключ-значение, где ключ и значение будут указывать на один и тот же объект.
Иногда это полезно. Но в целом - извращение. Хотя если объект указывает сам на себя, то уже сложновато говорить о том, что есть ключ.
Вы всё правильно подметили. Если в качестве ключей - числа, то есть индексы, то массив индексированный. Такой массив не принято называть ассоциативным, хотя формально можно работать, как с ассоциативным (зависит от ЯП). Здесь, правда, есть тонкость - индексы могут быть не по порядку, но это детали.
Вообще без ключа не получится, т.к. значения должны где-то храниться, иначе они просто не будут частью массива, а будут отдельными значениями или выражениями, сами по себе. Массив их объединяет и в качестве адресации использует ключи (или индексы).
То есть если массив индексированный, то есть в качестве ключей индексы, то это еще не означает, что он ассоциативный?
Ассоциативным он может называться только в том случае, если в ключах допускается что-то кроме индексов? Допустим, строки?
Поэтому в PHP, например, массив может стать ассоциативным, если мы самостоятельно зададим строку в качестве ключа, а вот в JS мы так сделать с массивами не можем, поэтому ассоциативными их не называют?
Nikolino, в PHP массив может быть вообще смешанным. Так что не стоит зацикливаться на этих названиях. Они ничего толком не дают на практике. Просто индексированным массивом обычно называют тот, где все ключи - числа, а ассоциативным тот, где в качестве ключей - строки (имена ключей).
В JS массив всегда индексированный, а в роли ассоциативного выступают объекты.