On m'a souvent demandé, si l'éventail de PHP est accessible avec foreach, est l'ordre traversal fixe? Dans quel ordre? Par exemple, ?php$arr?????''''''''''''''''''''''''''''''$arr $arr''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Baidu'? - 2008; foreach ($arras$ke
On me demande souvent, PHP tableau, si accessible par foreach, est l'ordre traversal fixe? Dans quel ordre ?
Comme quoi:
<>
$arr 'laruence') s 'huixinchen';
$arr syahoo's 2007;
$arr 'baidu') s 2008;
Foreach
($arr
quant à
$key . . . . $val . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
{
Quel est le résultat ?
}
par exemple:
<>
$arr 'huixinchen';
$arr s1s s 2007;
$arr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Foreach
($arr
quant à
$key . . . . $val . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
{
Quel est le résultat maintenant?
}
Pour bien comprendre ce problème, je pense que la première chose à faire est de comprendre la structure de mise en œuvre interne du tableau PHP ...
Le tableau de PHP est en PHP, le tableau est implémenté avec un HashStructure (HashTable), PHP utilise certains mécanismes, de sorte que le tableau peut être ajouté et supprimé à la complexité de temps de O(1), et prend en charge à la fois linéaire traversal et l'accès aléatoire.
Comme nous l'avons vu dans l'article précédent, l'algorithme HASH de PHP, basé sur cela, nous faisons une extension supplémentaire.
Avant d'apprendre à connaître HashTable, regardons la définition structurelle de HashTable, et j'ai ajouté un commentaire pour vous permettre de comprendre facilement:
Typedef
Struct
shtable
{
Uint
nTableSize; /? intervalles de valeur de hh
Uint
nTableMask; /s égale nTableSize -1, pour un positionnement rapide
Uint
nNumOfElements; Nombre d'éléments réels dans hashTable
Ulong
nNextFreeElement; /? Index numérique pour le prochain emplacement disponible gratuit
Bucket spInternalPointer; /- Pointeur de position interne, sera réinitialisé, ces fonctions transversales sont utilisées par le
Seau spListHead; /?élément de tête, pour traversal linéaire
Seau spListTail; /-élément de queue, pour la traversée linéaire
Seau sarBuckets; /-Conteneurs de stockage réels.
dtor?func?t
pDestructor;/le destructeur de l'élément (pointeur)
zend-bool
persistante;
non signé
carboniser
nApplyCount; /-Loop Traversal Protection
zend-bool
bApplyProtection;
#if
ZEND-DEBUG
Int
insin;
#endif
}
HashTable;