Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GÉRER DES LISTES AVEC TSTRINGLIST [POO]


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : tstringlist, chaines, tableaux, array, liste Niveau : Initié Date de création : 25/08/2005 Date de mise à jour : 25/08/2005 09:49:29 Vu / téléchargé: 4 424 / 592

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Gestion de panier: ajouter, insérer, déplacer, supprimer, trier, repérer, vider, enregistrer dans un fichier, afficher dans le navigateur...

C'est une classe PHP opérationnelle, testée et retestée (!) qui reprend les lignes essentielles de la classe TStringList disponible en langage Delphi (cf classes.pas).

Le fonctionnement de la classe est simple : tous les items sont juxtaposés dans une chaîne de caractères et séparés par le caractère #0 de la table ASCII (non disponible sur le clavier).
ATTENTION: si vous ajoutez un item comportant ce caractère, toute la liste sera faussée. Le caractère est paramétrable via la variable $FSep.

En principe, avec cette classe, on peut gérer facilement des paniers sachant que la classe a des relations E/S permettant des enregistrements et des restaurations faciles depuis les fichiers.

Testé sur:
  Apache 1.3.27
  PHP 4.3.3
  Windows
 

Source

  • <?php
  • class TStringList {
  • //==================================== VARIABLES INTERNES
  • /*private*/ var $FSep = '';
  • /*private*/ var $FContent = '';
  • //==================================== UTILITAIRES
  • /*private*/ function CountCharInStr($Char, $String) {
  • $Cnt = 0;
  • for ($x=0 ; $x<strlen($String) ; $x++)
  • if ($String[$x] == $Char)
  • $Cnt++;
  • return $Cnt;
  • }
  • /*private*/ function IL_CheckError($Index) {
  • return ($Index<0) || ($Index>=$this->Count());
  • }
  • /*private*/ function Min($I1, $I2) {
  • if ($I1<$I2)
  • return $I1;
  • else
  • return $I2;
  • }
  • /*private*/ function AnsiCompareString($S1, $S2) {
  • for ($idx=0 ; $idx < $this->Min(strlen($S1),strlen($S2)) ; $idx++)
  • if (Ord($S1[$idx]) < Ord($S2[$idx]))
  • return true;
  • else
  • return false;
  • }
  • //==================================== CORPS GENERAL
  • /*public*/ function ResetList() {
  • $this->FSep = chr(0);
  • $this->FContent = '';
  • }
  • /*public*/ function Count() {
  • return $this->CountCharInStr($this->FSep, $this->FContent);
  • }
  • /*public*/ function Add($Value) {
  • $this->FContent .= $Value . $this->FSep;
  • }
  • /*public*/ function Delete($Index) {
  • if ($this->IL_CheckError($Index))
  • Exit;
  • $Rsl = '';
  • for ($x=0 ; $x<=$this->Count() - 1 ; $x++)
  • if ($x != $Index)
  • $Rsl .= $this->GetItem($x) . $this->FSep;
  • $this->FContent = $Rsl;
  • }
  • /*public*/ function Insert($Index, $Value) {
  • $Rsl = '';
  • for ($x=0 ; $x<$this->Count() ; $x++) {
  • if ($x == $Index)
  • $Rsl .= $Value . $this->FSep;
  • $Rsl .= $this->GetItem($x) . $this->FSep;
  • }
  • if ($Index == $this->Count())
  • $Rsl .= $Value . $this->FSep;
  • $this->FContent = $Rsl;
  • }
  • /*public*/ function Move($CurIndex, $NewIndex) {
  • $Rsl = $this->GetItem($CurIndex);
  • $this->Delete($CurIndex);
  • if ($NewIndex > $CurIndex)
  • $NewIndex--;
  • $this->Insert($NewIndex,$Rsl);
  • }
  • /*public*/ function GetItem($Index) {
  • $Rsl = '';
  • $Last = 0;
  • $Cnt = 0;
  • if ($this->IL_CheckError($Index))
  • Exit;
  • for ($x=0 ; $x<strlen($this->FContent) ; $x++)
  • if ($this->FContent[$x] == $this->FSep) {
  • if ($Index == $Cnt) {
  • $Rsl = substr($this->FContent, $Last, $x-$Last);
  • break;
  • }
  • $Cnt++;
  • $Last = $x+1;
  • }
  • return $Rsl;
  • }
  • /*public*/ function SetItem($Index, $Value) {
  • if ($Index > $this->Count()-1)
  • $this->Add($Value);
  • else {
  • if ($this->IL_CheckError($Index))
  • Exit;
  • $Rsl = '';
  • for ($x=0 ; $x<=$this->Count()-1 ; $x++)
  • if ($x == $Index)
  • $Rsl .= $Value . $this->FSep;
  • else
  • $Rsl .= $this->GetItem($x) . $this->FSep;
  • $this->FContent = $Rsl;
  • }
  • }
  • /*public*/ function Clear () {
  • $this->FContent = '';
  • }
  • /*private*/ function SortEx($SortMode) {
  • for ($i=1 ; $i<$this->Count() ; $i++) {
  • $Locked = false;
  • for ($n=0 ; $n<$i ; $n++) {
  • if (($this->AnsiCompareString($this->GetItem($i), $this->GetItem($n))==$SortMode) && !$Locked) {
  • $this->Move($i,$n);
  • $Locked = true;
  • }
  • }
  • }
  • }
  • /*public*/ function Sort() {
  • $this->SortEx(true);
  • }
  • /*public*/ function RevSort() {
  • $this->SortEx(false);
  • }
  • /*public*/ function IndexOf($Value) {
  • $Position = -1;
  • for ($x=0 ; $x<$this->Count() ; $x++)
  • if ($this->GetItem($x)==$Value) {
  • $Position=$x;
  • break;
  • }
  • return $Position;
  • }
  • /*public*/ function AddToFile($FileName) {
  • $fichier = fopen($FileName, 'a+');
  • fputs($fichier, $this->FContent);
  • fclose($fichier);
  • }
  • /*public*/ function LoadFromString($Value) {
  • $this->FContent = $Value;
  • }
  • /*public*/ function LoadFromFile($FileName) {
  • $fichier = fopen($FileName, 'r');
  • $this->FContent = fread($fichier, filesize($FileName));
  • fclose($fichier);
  • }
  • /*public*/ function Display() {
  • echo str_replace($this->FSep, '<br>', $this->FContent);
  • }
  • } //fin CLASS
  • ?>
<?php
  class TStringList {

//==================================== VARIABLES INTERNES
    /*private*/ var $FSep = '';
    /*private*/ var $FContent = '';

//==================================== UTILITAIRES
    /*private*/ function CountCharInStr($Char, $String) {
      $Cnt = 0;
      for ($x=0 ; $x<strlen($String) ; $x++)
        if ($String[$x] == $Char)
          $Cnt++;
      return $Cnt;
    }

    /*private*/ function IL_CheckError($Index) {
      return ($Index<0) || ($Index>=$this->Count());
    }

    /*private*/ function Min($I1, $I2) {
      if ($I1<$I2)
        return $I1;
      else
        return $I2;
    }

    /*private*/ function AnsiCompareString($S1, $S2) {
      for ($idx=0 ; $idx < $this->Min(strlen($S1),strlen($S2)) ; $idx++)
        if (Ord($S1[$idx]) < Ord($S2[$idx]))
          return true;
        else
          return false;
    }

//==================================== CORPS GENERAL
    /*public*/ function ResetList() {
      $this->FSep = chr(0);
      $this->FContent = '';
    }

    /*public*/ function Count() {
      return $this->CountCharInStr($this->FSep, $this->FContent);
    }

    /*public*/ function Add($Value) {
      $this->FContent .= $Value . $this->FSep;
    }

    /*public*/ function Delete($Index) {
      if ($this->IL_CheckError($Index))
        Exit;
      $Rsl = '';
      for ($x=0 ; $x<=$this->Count() - 1 ; $x++)
        if ($x != $Index)
          $Rsl .= $this->GetItem($x) . $this->FSep;
      $this->FContent = $Rsl;
    }

    /*public*/ function Insert($Index, $Value) {
      $Rsl = '';
      for ($x=0 ; $x<$this->Count() ; $x++) {
        if ($x == $Index)
          $Rsl .= $Value . $this->FSep;
        $Rsl .= $this->GetItem($x) . $this->FSep;
      }
      if ($Index == $this->Count())
        $Rsl .= $Value . $this->FSep;
      $this->FContent = $Rsl;
    }

    /*public*/ function Move($CurIndex, $NewIndex) {
      $Rsl = $this->GetItem($CurIndex);
      $this->Delete($CurIndex);
      if ($NewIndex > $CurIndex)
        $NewIndex--;
      $this->Insert($NewIndex,$Rsl);
    }

    /*public*/ function GetItem($Index) {
      $Rsl = '';
      $Last = 0;
      $Cnt = 0;
      if ($this->IL_CheckError($Index))
        Exit;
      for ($x=0 ; $x<strlen($this->FContent) ; $x++)
        if ($this->FContent[$x] == $this->FSep) {
          if ($Index == $Cnt) {
            $Rsl = substr($this->FContent, $Last, $x-$Last);
            break;
          }
          $Cnt++;
          $Last = $x+1;
        }
      return $Rsl;
    }

    /*public*/ function SetItem($Index, $Value) {
      if ($Index > $this->Count()-1)
        $this->Add($Value);
      else {
        if ($this->IL_CheckError($Index))
          Exit;
        $Rsl = '';
        for ($x=0 ; $x<=$this->Count()-1 ; $x++) 
          if ($x == $Index)
            $Rsl .= $Value . $this->FSep;
          else
            $Rsl .= $this->GetItem($x) . $this->FSep;
        $this->FContent = $Rsl;
      }
    }

    /*public*/ function Clear () {
      $this->FContent = '';
    }

      /*private*/ function SortEx($SortMode) {
        for ($i=1 ; $i<$this->Count() ; $i++) {
          $Locked = false;
          for ($n=0 ; $n<$i ; $n++) {
            if (($this->AnsiCompareString($this->GetItem($i), $this->GetItem($n))==$SortMode) && !$Locked) {
              $this->Move($i,$n);
              $Locked = true;
            }
          }
        }
      }

    /*public*/ function Sort() {
      $this->SortEx(true);
    }

    /*public*/ function RevSort() {
      $this->SortEx(false);
    }

    /*public*/ function IndexOf($Value) {
      $Position = -1;
      for ($x=0 ; $x<$this->Count() ; $x++)
        if ($this->GetItem($x)==$Value) {
          $Position=$x;
          break;
        }
      return $Position;
    }

    /*public*/ function AddToFile($FileName) {
      $fichier = fopen($FileName, 'a+');
      fputs($fichier, $this->FContent);
      fclose($fichier);
    }

    /*public*/ function LoadFromString($Value) {
      $this->FContent = $Value;
    }

    /*public*/ function LoadFromFile($FileName) {
      $fichier = fopen($FileName, 'r');
      $this->FContent = fread($fichier, filesize($FileName));
      fclose($fichier);
    }

    /*public*/ function Display() {
      echo str_replace($this->FSep, '<br>', $this->FContent);
    }

  } //fin CLASS
?>

Conclusion

Vous pouvez toujours allez voir http://altert.family.free.fr/

IMPORTANT: le Zip propose un script de démonstration.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

25 août 2005 09:49:29 :
?

Commentaires et avis

signaler à un administrateur
Commentaire de loxyey le 24/12/2005 03:52:59

Bon, je suis nul en php, et il me falait un panier, et bien cette source qui est marqué initié, et bien elle est facilement compréhensible grace au fichier magique index.php, tout semble si simple, j'ai réussi a mettre en place ma boutique.

un grand merci pour cette class facil d'usage, mais bon apres je m'aventure pas dans le code de la class, c'est du chinoi melanger au russe. ;)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

insertions multiples (case à cocher, champs ...) [ par PatX ] Bonjour !J'ai un petit soucis avec l'administration de mon menu : le but du jeu, c'est de cr&#233;er les liens d'un menu en les ins&#233;rant dans une Recuperation des données d'une requete dans une liste deroulante impossible [ par Maiku ] BonjourJ'essaye de recuperer toutes les donn&#233;es d'un champ de ma base de donn&#233;e dans une liste d&#233;roulante. Confront&#233; &#224;&nbsp;c les tableaux de tableaux... [ par Teclis01 ] Bonjour, En fait j'aimerais faire des tableaux de tableaux et je n' y arrive pas en php mais en dessin oui donc si vous pouviez m'aider a trouver la [Tableaux] Décaler les valeurs [ par tomix81 ] bonjour,J'ai un tableau defini comme suit:Code :<pre class="alt2" style="BORDER-RIGHT: 1px inset; PADDING-RIGH valeur dans un array recup d'une table [ par rduvrac ] Bonjour Je cherche à générer une liste pour l'insérer dans un tableau. j'ai ce code : $listegeneree = array (1, 2, 5, 6, 7); $result = array_rand ($l Tableaux Multidimentionnels (question relativement tordue ^^) [ par Tizard ] Bonjour, alors voil&#224; je m'y connais assez en PHP, mais l&#224; je suis bloqu&#233;.Donc j'ai un tableau de ce type (c'est un jeu de cartes)Array Au secours avec les tableaux [ par defkrie ] voila j1 un tableau du style$l1 = array("0", "0", "0", "0", "0", "0", "0", "0");$l2 = array("0", "0", "0", "0", "0", "0", "0", "0");$l3 = array("0", " Liste deroulante avec base de données [ par bandzai87 ] Donc voil&#224; mon truc g une liste deroulantes qui est li&#233;es a une autre, elles marchent mais les infos sont &#233;crites en dure j'aimerai fai tri sur 2 tableaux .... [ par djagger ] Salut !Voici mon probl&#232;me.J'ai 2 tableaux, correspondant &#224; des noms et les id associ&#233;es &#224; ces noms:$mesNoms=array();$mesNoms[0]="F liste deroulante prends des valeur selon le choix du 1ere liste onchage php/javascript [ par jalilham ] salut a tousBonjour,jai un formulaire contient 2 combox 1 rempli par le


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.