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 :

preg_match vs explode [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut preg_match vs explode
    Bonjour a tous,
    J'aimerais savoir quelle est la facon qui est la moins gourmande pour php entre 2 solutions visant a récupérer un ou plusieurs chiffres.
    (but du jeux : 5-test.html => 5, 55-test.html => 55, 5-test4-r.html => 5)
    pour essayer de trouver une reponse j'ai essayé ce 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
     
    	$s_str = '5-mont6-itre.html';
    	$i_fin = 1000;						//nb de test a effectuer 
    	$i_time1 = microtime();
    //	for ($i=0; $i<$i_fin; $i++) {
    		$a_array = explode('-',$s_str);
    		$test = $a_array[0];
    	//	print $a_array[0].'<br>';
    //	}
    	$i_time2 = microtime();
    	print "tps execution du explode ".(($i_time2-$i_time1))." seconde<br />";
     
    	$i_time1 = microtime();
    //	for ($i=0; $i<$i_fin; $i++) {
    		preg_match('#^([0-9]+).+#', $s_str, $a_array);
    		$test = $a_array[1];
    	//	print $a_array[1].'<br>';
    //	}
    	$i_time2 = microtime();
    	print "tps execution du preg_match ".(($i_time2-$i_time1))." seconde<br />";
    j'ai tester ce code avec et sans la boucle, avec, le preg match retourne un chiffre plus grand que le explode, tandis que sans la boucle, le preg_match retourne un chiffre plus petit.
    Est ce que je peux me fier aux chiffres retournés ?

    Quelle est la façon de faire la plus rapide dans le cas ou le traitement ne tournerais pas dans une boucle ?

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Si le nombre à récupérer sera toujours en premier, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $a_array = explode('-', $s_str, 2);
    Et ce fin d'optimiser ton explode pour le limiter au premier tiret...

    Cette façon sera la plus optimisée à mon avis.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Merci pour ta réponse, sympa pour le conseil.

    Néanmoins j'aimerais savoir si le teste que j'ai fait est fiable et si oui est ce que ma déduction est correct => explode plus rapide pour de traitement de mass, preg_match plus rapide pour traitement spontané (pour ce cas de figure la)


    Merci d'avance

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Est-ce bien nécessaire de le savoir ?
    Explode est effectivement plus performant que les fonctions PCRE mais est moins souple.

    Pour ce qui est des traitement unitaires, à moins d'être à la nanoseconde prêt, je dirais tout simplement qu'on s'en fiche, non ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Oui effectivement je suis pas a la nano seconde prêt mais j'aimerais quand même connaitre la bonne réponse et pouvoir en discuter un jour ac un développeur.

    Donc l'intérêt pour moi dans ce cas n'est pas de gagner du temps mais plus d'avoir la réponse ET d'avoir une technique a peu prés fiable me permettant de faire des test de rapidité sur certaine fonctions / process.

    Merci pour ta réponse.

  6. #6
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Comme l'explique snafu,
    explode() sera moins souple d'utilisation puisque le délimiteur devra toujours être le même.

    Quand tu as besoin de faire des choses plus complexe avec des délimiteurs différents, il te faudra aller vers les expressions régulières.

    Dans ton exemple, explode est plus que très bien adaptée.

    Après explode sera toujours plus rapide que preg_*, mais l'utilisation n'est pas la même. De plus, explode est plus facile à relire pour un non initié ( même si la la regex est simple )

    Tous ces éléments rentrent en ligne de compte dans un code.

    De plus, la rapidité est une chose mais en php, tu sera souvent plus limité par l'environement ( filesystem, bdd ) que par ton code ( surtout avec les puissances machines actuelles ).
    Mais ton argumentaire se tient, il est bien de tester son code, il existe des outils de profiling pour ca te permettant de savoir qu'elle partie de ton code est gourmande. Il me semble que xdebug a cette fonctionnalitée

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup de ta réponse, je vais tester ce soir l'outil dont tu me parle pour profilé les process.
    Merci
    bon code

  8. #8
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    En php5, tu peux utiliser le paramètre get_as_float qui te retournera une valeur plus juste pour tes calculs de temps d'exécution.

    http://fr.php.net/manual/fr/function.microtime.php

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

Discussions similaires

  1. equivalent de la fonction EXPLODE de php
    Par gyouk dans le forum ASP
    Réponses: 1
    Dernier message: 28/11/2005, 10h49
  2. Fonctionnement de la commande 'preg_match'
    Par Trebor dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2005, 13h03
  3. explode en pure sql
    Par ecuyer dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/09/2005, 10h55
  4. Quel est l'equivalent de Explode de php ?
    Par reg11 dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 15h50
  5. equivalent à explode?
    Par djridou dans le forum Langage
    Réponses: 3
    Dernier message: 28/08/2002, 11h01

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