OVH Cloud OVH Cloud

aide avec performance : ereg()

5 réponses
Avatar
erickrefener
Bonjour,

J'ai fait un script qui analyse de longues chaines de caracteres et j'ai
besoin d'effectuer différentes commandes en fonction des 5 premiers
caracteres de celles ci :

pour ce faire j'utilise :

switch (true){
case ( ereg("12345", $data) ):
print '$data est un chaine 12345';
break;
case ( ereg("54321", $data) ):
print '$data est un chaine 54321';
break;
default:
print 'invalid data';
}

car l'ordre de ces 5 premiers caracteres ne peut pas se retrouver dans
la suite de la chaine ...

Je sais qu'il éxiste pas mal de facons de faire cela, mais pourriez vous
me dire quelle serait la facon la plus performante pour le faire ?
(de maniere a ce que php n'analyse pas toute la chaine mais que les 5
premiers caracteres ...)


merci beaucoup d'avance,


Jonathan

5 réponses

Avatar
Guillaume Bouchard
erickrefener wrote:

case ( ereg("12345", $data) ):

Je sais qu'il éxiste pas mal de facons de faire cela, mais pourriez vous
me dire quelle serait la facon la plus performante pour le faire ?
(de maniere a ce que php n'analyse pas toute la chaine mais que les 5
premiers caracteres ...)


Bonjour.
le fonction substr est ton amie.

http://www.php.net/substr

if(substr($data,0,5) == '12345')){
..
}

On ne le repetera jamais assez, il n'existe pas que les expressions
régulieres dans la vie. Principe, si votre masque de recherche ne
contient pas d'expression reguliere, cela n'a pas à être une regex.

Note, tu aurais pu accelerer le systeme en mettant ^12345 dans ton
masque, il se serait contenté de regarder le debut de la chaine.

--
Guillaume.

Avatar
loufoque
Message d'origine de erickrefener :

J'ai fait un script qui analyse de longues chaines de caracteres et j'ai
besoin d'effectuer différentes commandes en fonction des 5 premiers
caracteres de celles ci.

car l'ordre de ces 5 premiers caracteres ne peut pas se retrouver dans
la suite de la chaine ...

Je sais qu'il éxiste pas mal de facons de faire cela, mais pourriez vous
me dire quelle serait la facon la plus performante pour le faire ?
(de maniere a ce que php n'analyse pas toute la chaine mais que les 5
premiers caracteres ...)



substr() puis strstr()
ereg() tu peux déjà le rayer de ton vocabulaire pour toujours
A la limite un preg_match() bien fait, mais je pense que ce sera plus long.

Avatar
Thibaut Allender

if(substr($data,0,5) == '12345')){


parse error at line 1, excepted { ;)

--
freelance + web|system developper|designer
+ 32 496 26 75 76 + http://www.capsule.org

Avatar
tyoup
Thibaut Allender wrote:

if(substr($data,0,5) == '12345')){



parse error at line 1, excepted { ;)


non : unexpected ')' on line 1 :p

--
Tyoup


Avatar
Anthony Rossetto - [vulgarisation-informatique.com]
if(substr($data,0,5) == '12345')){

parse error at line 1, excepted { ;)


Enlève la dernière parenthèse, ce qui te donne

if(substr($data,0,5) == '12345'){

a +