IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Optimisation] Amélioration de script (Affichage lettre par lettre)


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut [Optimisation] Amélioration de script (Affichage lettre par lettre)
    Voilà, mon script fonctionne très bien ... mais (et oui :p)
    Je trouve qu'il boucle vraiment trop ...

    Donc voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    [...]
    $a = 64;
    $i = 0;
    while($b = mysql_fetch_array($r)){
    	$site[$i][0] = $b['nom'];
    	$site[$i][1] = $b['lien'];
    	$site[$i][2] = $b['image'];
    	$i++;
    }
    for($a = 64; $a <= 90; $a++) {
    	for($i = 0; $i < count($site); $i++){
    		if ( chr($a) == $site[$i][0]{0} ) {
    				$c .= 'affichage...';
    		}
    	}
    	if ($c != '') {
    		$txt .= '<span class="gras">'. chr($a) .'</span><br />'.$c;
    		unset($c);
    	}
    }
     
    ?>
    Si vous avez une idée de comment l'améliorer n'hésiter pas .

    Merci d'avance .

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    ça aurait été plus simple si tu avais fait un tri dans ta requête MySQL

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Comment ça ? Puisque dans tous les cas, je souhaite n'afficher la lettre que s'il y a un contenu ...

    Je ne vois pas trop comment faire ? (sachant qu'ici je n'ai qu'une requête MySQL).

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par SpiritOfDoc
    Comment ça ? Puisque dans tous les cas, je souhaite n'afficher la lettre que s'il y a un contenu ...
    du contenu où ?

    montre nous 3-4 lignes que tu as dans ta table et le résultat que tu veux avoir parce que je n'ai peut-être pas compris ce que fait ton code

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $a = 97;
     
    $site = array('0' => array('site1','<a>site1</a>'),
    	      '1' => array('site2','<a>site2</a>'),
    	      '2' => array('site3','<a>site3</a>'));
     
     
    while($a <= 122) {
    	for($i = 0; $i < count($site); $i++){
    		if ( chr($a-32) == $site[$i][0]{0} ) {
    				$c .= $site[$i][1].'<br />';
    		}
    	}
    	if ($c != '') {
    		$txt .= '<b>'. chr($a-32) .'</b><br />'.$c;
    		unset($c);
    	}
    	$a++;
    }
    echo $txt;
     
    ?>
    Voilà c'est transcrit avec des tableaux pour que tu puisses tester.
    Ce code, et l'autre, fonctionne très bien. Mais j'aimerai savoir s'il est possible de le simplifier.

    C'est donc un affichage lettre par lettre en fonction de ce que contiennent les tableaux (ma requête mysql ne fait que créer des tableaux identiques à ceux ci). Sachant que je trouvais très moche le fait d'afficher toutes les lettres même si elle n'avait pas de contenant ... j'ai préféré fais un script de ce style :').

    Voilà

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    je ferais ça comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    $sites = array(
        array('nomSite' => 'Aite1', 'urlSite' => 'adresse du Aite1'),
        array('nomSite' => 'Cite3', 'urlSite' => 'adresse du Cite3'),
        array('nomSite' => 'Fite2', 'urlSite' => 'adresse du Fite2'),
        array('nomSite' => 'Fite25', 'urlSite' => 'adresse du Fite25'),
    );
     
    $lettreEnEncours = '';
     
    foreach ($sites as $site) {
        $premiereLettre = substr($site['nomSite'], 0, 1);
     
        if ($lettreEnEncours != $premiereLettre) {
            $lettreEnEncours = $premiereLettre;
     
            ?>
                <p>
                    <strong><?php echo htmlspecialchars($lettreEnEncours);?></strong>
                </p>
            <?php
        }
     
        ?>
            <a href="<?php echo htmlspecialchars($site['urlSite']);?>">
                <?php echo htmlspecialchars($site['nomSite']);?></a>
            <br/>
        <?php
    }
    tu remarquera que le tableau est triés suivant le nom du site, tu peux faire ce tri dans la requête MySQL

    ensuite tu remplaces le "foreach" par "while ($site = mysql_fetch_assoc($resultat)) {" et tu peux garder mon code tel quel

    mon code fais exactement la même chose que le tient mais il est plus simple à lire donc par définition il est plus simple à maintenir. Ensuite tu n'as plus qu'à utiliser une classe Site et la transformation sera presque complète

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Merci bien

    J'ai juste remplacé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substr($site['nomSite'], 0, 1)
    par

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script Texte lettre par lettre
    Par Bero962 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2013, 18h20
  2. Affichage texte lettre par lettre
    Par Yami no tenshi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/09/2008, 13h22
  3. Afficher un texte lettre par lettre
    Par koKoTis dans le forum Flash
    Réponses: 2
    Dernier message: 11/12/2007, 21h14
  4. Comparer une chaîne lettre par lettre
    Par ero-sennin dans le forum C++Builder
    Réponses: 9
    Dernier message: 10/11/2007, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo