Parce que les tableaux sont trop puissants en PHP, ces structures de données sont incluses, il n'est donc pas nécessaire de prêter attention à ces structures de données, et ces concepts s'estomperont avec le temps. Il existe une extension en PHP appelée Data Structures, qui inclut ces structures de données communes. Présentons-le aujourd’hui.
En PHP, parce que les tableaux sont trop puissants, ces structures de données sont incluses, il n'est donc pas nécessaire de prêter attention à ces structures de données avec le temps, ces concepts disparaîtront. structures de données en PHP.
Il existe une extension Data Structures en PHP, qui inclut ces structures de données communes.
Structure de données PHP
Itérer sur une PriorityQueue est destructeur et équivaut à des opérations pop continues jusqu'à ce que la file d'attente soit vide.
Définir la capacité
La capacité par défaut est de 8, vous pouvez définir la capacité manuellement. Cette capacité ne fait pas référence à la longueur de la file d'attente, mais à l'espace de stockage. Assurez-vous qu'il y a suffisamment de mémoire lors de la réallocation de la capacité
Si la valeur est inférieure ou égale à la capacité actuelle, la capacité restera inchangée.
$queue = new Ds\PriorityQueue();
$queue->allocate(8);
Copier après la connexion
Obtenir la capacitéLorsque la capacité est actuellement définie manuellement, si la capacité définie est supérieure à la capacité réellement occupée, la capacité définie sera renvoyée. Sinon, la capacité réelle est restituée.
$queue = new Ds\PriorityQueue();
// 此时返回默认值 8
$queue->capacity();
Copier après la connexion
Définir la prioritéPlus la valeur est grande, plus la priorité est élevée
$queue = new Ds\PriorityQueue();
$queue->push('value1', 1);
$queue->push('value2', 2);
Copier après la connexion
Exemple
$queue = new Ds\PriorityQueue();
$queue->push('沙僧', 2);
$queue->push('唐僧', 5);
$queue->push('白龙马', 1);
$queue->push('猪八戒', 3);
$queue->push('孙悟空', 4);
$cout = $queue->count();
for($i=0; $i<$cout; $i++) {
echo $queue->pop();
echo PHP_EOL;
}
Copier après la connexion
Sortie
唐僧
孙悟空
猪八戒
沙僧
白龙马
Copier après la connexion
Scénario d'application
MySQL Afin d'accélérer la requête et d'éviter le tri, l'index ne peut pas être utilisé et aucun tri n'est effectué. Effectuez un tri manuel au niveau du code du serveur, puis revenez.
Autres scénarios d'application...
La file d'attente à double extrémité Deque
a deux pointeurs pointant respectivement vers la tête et la queue. L'insertion et l'éjection peuvent être effectuées respectivement au niveau de la tête et de la queue.
Avantages
-
Prend en charge la syntaxe des tableaux (crochets).
-
Occupe moins de mémoire qu'un tableau pour le même nombre de valeurs.
Libérez automatiquement la mémoire allouée lorsque sa taille diminue suffisamment.
get(), set(), push(), pop(), shift() et unshift() sont tous O(1).
-
Inconvénients
-
La valeur de capacité définie doit être une puissance de 2 et la valeur par défaut est de 8. Par exemple, 2^2
-
insert() et remove() sont O(n).
-
Description de la méthode de classe
File d'attente à double extrémité Deque
Exemple
$deque = new Ds\Deque();
$deque->push(...['唐僧', '孙悟空', '猪八戒', '沙僧', '白龙马']);
$clone = $deque->copy();
$count = $deque->count();
echo '头:'.$deque->first().PHP_EOL;
echo '尾:'.$deque->last().PHP_EOL;
echo '--- 从队尾开始 ----'.PHP_EOL;
for($i=0; $i<$count; $i++) {
echo $deque->pop();
echo PHP_EOL;
}
echo '--- 从队头开始 ----'.PHP_EOL;
for($i=0; $i<$count; $i++) {
echo $clone->shift();
echo PHP_EOL;
}
Copier après la connexion
Sortie
头:唐僧
尾:白龙马
--- 从队尾开始 ----
白龙马
沙僧
猪八戒
孙悟空
唐僧
--- 从队头开始 ----
唐僧
孙悟空
猪八戒
沙僧
白龙马
Copier après la connexion
Scénarios d'application
Scénarios d'applications multiples
Queue FIFO (premier entré, premier sorti)
Le la file d'attente est " collection « premier entré, premier sorti » ou « FIFO », qui permet uniquement d'accéder à la valeur en début de file d'attente.
Exemple
$queue = new Ds\Queue();
$queue->push('唐僧');
$queue->push(...['孙悟空', '猪八戒']);
$queue->push(['沙僧', '白龙马']);
print_r($queue);
Copier après la connexion
Output
Ds\Queue Object
(
[0] => 唐僧
[1] => 孙悟空
[2] => 猪八戒
[3] => Array
(
[0] => 沙僧
[1] => 白龙马
)
)
Copier après la connexion
Stack LIFO (First In, Last Out)
Stack est une collection "dernier entré, premier sorti" ou "LIFO" qui permet uniquement d'accéder aux valeurs en haut de la structure .
$Stack = new Ds\Stack();
$Stack->push('唐僧');
$Stack->push(...['孙悟空', '猪八戒']);
$Stack->push(...['沙僧', '白龙马']);
$cout = $Stack->count();
for($i=0; $i<$cout; $i++) {
echo $Stack->pop();
echo PHP_EOL;
}
Copier après la connexion
Output
白龙马
沙僧
猪八戒
孙悟空
唐僧
Copier après la connexion
Map Dictionary
Map est une collection séquentielle de paires clé-valeur [key=>value], semblable à un tableau. Les clés peuvent être de n’importe quel type mais doivent être uniques. Si des valeurs sont ajoutées à la carte à l'aide de la même clé, l'ajout ultérieur remplacera la valeur précédente.
Avantages
Les clés et les valeurs peuvent être de n'importe quel type, y compris les objets
Prend en charge la syntaxe des tableaux.
Conserver l'ordre d'insertion.
Les performances et l'efficacité de la mémoire sont similaires aux données.
Les valeurs peuvent être de n'importe quel type, y compris les objets.
- Prend en charge la syntaxe des tableaux.
Conserver l'ordre d'insertion.
Libérez automatiquement la mémoire allouée lorsque la taille tombe suffisamment bas. La complexité
-
add(), remove() et contain() sont toutes O(1).
-
Inconvénients
-
Ne prend pas en charge push(), pop(), insert(), shift() ou unshift()
-
S'il y a une valeur supprimée dans le tampon avant l'accès à l'index, Alors get() est O(n), sinon c'est O(1).
-
La différence entre Map et Set
Les méthodes de stockage sont différentes. Magasins de cartes sous la forme de [clé => valeur] et magasins de ensembles sous la forme de [...clés] ; Map et Set utilisent tous deux des clés pour garantir l'ordre, de sorte que la clé ne peut pas être modifiée. .
Apprentissage recommandé : Tutoriel vidéo php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!