8
votes

PHP a-t-il un dictionnaire commandé?

PHP a un dictionnaire commandé, comme celui de python ? C'est-à-dire que chaque paire de valeurs de clé a également une ordinale associée à celle-ci.


1 commentaires

Afaik, non mais aimerais savoir


3 Réponses :


5
votes

C'est ainsi que les matrices de PHP fonctionnent hors de la boîte. Chaque paire de clé / valse a un numéro ordinal, de sorte que l'ordre d'insertion est rappelé. Vous pouvez facilement le tester vous-même:

http://ideone.com/sxfei


3 commentaires

Ah, mais pouvez-vous dire, insérer un élément avant un autre élément sans supprimer / ré-ajouter des éléments en masse ?


Malheureusement non. Pour faire quelque chose comme si vous devez conserver une matrice indexée numérique, vous pouvez donc utiliser des fonctions telles que array_splice pour insérer à des compensations aléatoires. Et si vous devez également pouvoir accéder aux éléments via une clé de dictionnaire, vous aurez probablement besoin d'une sorte de mappage de mappage, caraptive les clés dictées sur leurs valeurs correspondantes dans la matrice indexée.


Le lien fourni non plus a une solution



3
votes

Si je comprends bien la description dans les documents Python correctement, oui. Les tableaux PHP ne sont en réalité que des cartes commandées:

Un tableau en PHP est en réalité une carte ordonnée. Une carte est un type qui associe des valeurs aux clés. Ce type est optimisé pour plusieurs utilisations différentes; Il peut être traité comme une matrice, une liste (vecteur), une table de hachage (une implémentation d'une carte), un dictionnaire, une collection, une pile, une file d'attente et probablement plus. Comme les valeurs de matrice peuvent être d'autres tableaux, les arbres et les matrices multidimensionnelles sont également possibles.

Documents PHP Array


1 commentaires

Que se passe-t-il lorsque vous insérez une clé qui existe déjà? Il semble laisser la clé en place, mais est-ce garanti? ideone.com/itvmw



2
votes

Les matrices PHP fonctionnent de cette façon par défaut.

$arr = array('one' => 1, 'two' => 2, 'three' => 3, 'four' => 4);
var_dump($arr); // 1, 2, 3, 4

unset($arr['three']);
var_dump($arr); // 1, 2, 4

$arr['five'] = 5;
var_dump($arr); // 1, 2, 4, 5


0 commentaires