Introduction détaillée à l'extension Data Structures en php

醉折花枝作酒筹
Libérer: 2023-03-11 20:26:02
avant
1812 Les gens l'ont consulté

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.

Introduction détaillée à l'extension Data Structures en php

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

  • File d'attente prioritaire

    Hash de table de hachage
  • Set Collection

  • Map Dictionary
  • Introduction à la structure de données
  • Priority QueuePriorityQueue

    PriorityQueue est très similaire à Queue. Les valeurs sont placées dans la file d'attente avec la priorité spécifiée, et la valeur avec la priorité la plus élevée sera toujours au début de la file d'attente.
  • Remarque

  • Pour les valeurs ayant la même priorité, l'ordre "premier entré, premier sorti" est conservé.
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 .
      • Exemple
      $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.
      • Libérez automatiquement la mémoire allouée lorsque la taille tombe suffisamment bas.
      • Inconvénients
      • Lorsque des objets sont utilisés comme clés, ils ne peuvent pas être convertis en tableaux.

      • Set Set

        Set est une série de valeurs uniques. Il n'existe qu'un seul jeu de clés qui ne stocke pas de valeurs et les clés ne peuvent pas être répétées.
      • Avantages

      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!

        Étiquettes associées:
        source:segmentfault.com
        Déclaration de ce site Web
        Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
        Tutoriels populaires
        Plus>
        Derniers téléchargements
        Plus>
        effets Web
        Code source du site Web
        Matériel du site Web
        Modèle frontal