2009-12-27 2 views
0

J'ai une question concernant les tableaux PHP.Les tableaux PHP indexés numériquement sont-ils initialisés de manière contiguë ou mappés?

Si je crée un tableau

$ids = array(); 

puis mettre quelque chose en position 1000 de celui-ci:

$ids[1000] = 5; 

Comment serait l'interprète faire en interne? Est-ce que les tableaux contiennent des morceaux de mémoire contigus comme Java? Serait-ce comme int [1000] où 1000 ints sont initlialized?

Ou est-ce plus d'une carte où 1000 est la clé et il lie aux données de 5? Je parle des internes de PHP.

Si j'ai un grand nombre index, serait-il moins efficace car il faudrait initialiser tous les index? OU est-ce que la carte est basée sur le nombre comme clé?

+0

Pourquoi ce wiki communautaire? –

+0

Est-il mauvais que ce soit? –

Répondre

1

Les tableaux sont hash en PHP. Donc, selon vos termes, ils sont cartographiés. Vous pouvez vérifier cela dans votre exemple en regardant $ids[0...999] après l'initialisation pour voir qu'ils n'existent pas et en comparant memory_get_usage() avant et après l'initialisation.

2

Tous les tableaux de PHP sont des tableaux associatifs efficaces qui conservent l'ordre d'insertion. Alors:

$array[1000] = 5; 

est pas fondamentalement différent:

$array['hello'] = 'world'; 
+0

sauf que le second exemple ne fonctionnera pas à cause d'une faute de frappe, oui. :-) – p4bl0

+1

@ p4bl0: Je l'ai corrigé. – Asaph

Questions connexes