Est-il Java HashMap équivalent en PHP?
J'ai besoin de PHP objet similaire à HashMap en Java, mais je n'ai pas trouvé quand j'ai googlé, donc si quelqu'un sait comment je peux imiter HashMaps en PHP, aide serait appréciée.
- Ce qui caractérise un hachage de la carte pour vous?
- J'ai besoin de paires clé/valeur, et j'ai besoin de pour obtenir les clés comme la matrice de la forme de la carte.
$keys = array_keys($array);
(et aussi voir sushils réponse ci-dessous)- Les tableaux sont en fait la seule structure de données en PHP (si vous ne considérez pas les classes/objets en tant que structure de données). Il fournit une clé/valeur de la structure et vous pouvez obtenir les clés facilement avec
array_keys
. Vous pouvez écrire une classe wrapper si vous le souhaitez.
Vous devez vous connecter pour publier un commentaire.
Tableaux en PHP peut avoir Valeur de la Clé de la structure.
O(1)
mais je pense que la surcharge est négligeable dans la plupart des cas.En fonction de ce que vous voulez, vous pourriez être intéressé par la SPL Objet de Stockage de classe.
http://php.net/manual/en/class.splobjectstorage.php
Il vous permet d'utiliser des objets comme des clés, dispose d'une interface pour le comte, obtenir le hash et autres goodies.
Créer un Java comme HashMap en PHP avec O(1) lire complexité.
Ouvrir un phpsh terminal:
La complexité de la
$myhashmap['mykey2']
dans ce cas semble être à temps constant O(1), ce qui signifie que la taille de $myhasmap approche de l'infini, la quantité de temps qu'il faut pour récupérer une valeur d'une clé reste le même.Preuve le tableau php de lire est la constante de temps:
Exécuter ce par le biais de l'interprète PHP:
La boucle ajoute 1 milliard de clés/valeurs, il faut environ 2 minutes pour tous les ajouter dans la table de hachage qui peut épuiser votre mémoire.
Puis voir combien de temps il faut pour faire une recherche:
Alors, quelle est la vitesse de tableau PHP carte de recherche?
La
10333
est la clé que nous regardé. 1 million de nanosecondes == 1 milliseconde. La quantité de temps qu'il faut pour obtenir une valeur à partir d'une clé est de 2,06 millions de nanosecondes ou environ 2 millisecondes. Environ la même quantité de temps si le tableau est vide. Cela ressemble à de la constante de temps pour moi.sorties "Banane"
prises de http://in2.php.net/manual/en/function.array.php
"fruits" => array("a" => "Orange", "b" => "Banana", "c" => "Apple")
après?$fruits['fruits']['a'] = 'Orange'; $fruits['holes']['first'] = 5; $fruits['numbers'][] = 1;
vous n'avez même pas besoin nécessairement pour créer l'un des tableaux avec desarray()
.HashMap qui fonctionne également avec les touches autres que les chaînes et les nombres entiers avec O(1) lecture de la complexité (en fonction de la qualité de votre propre fonction de hachage).
Vous pouvez faire un simple hashMap vous-même. Ce qu'est une table de hachage n'est de stocker des éléments dans un tableau à l'aide de la table de hachage comme index de clé. De hachage fonctions donner des collisions de temps en temps (pas souvent, mais ils peuvent le faire), de sorte que vous avez à stocker plusieurs éléments pour une entrée dans la table de hachage. Que simple, est une table de hachage:
Pour qu'il fonctionne il faut aussi une fonction de hachage pour vos clés et un comparateur pour l'égalité (si vous n'avez que quelques articles ou pour une autre raison, n'ont pas besoin de vitesse, vous pouvez laisser la fonction de hachage return 0; tous les articles seront mis dans le même seau et vous obtiendrez O(N) la complexité)
Voici un exemple:
Qui donne en sortie:
IEqualityComparer
devrait être uninterface
ici