Garder uniquement les caracteres alphanumerique d'une variable recupérée

Résolu
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 - 24 août 2009 à 18:02
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 - 27 août 2009 à 14:41
Bonjour,


Ma question est assez simple, je reçois 2 variables, par exemple :

$Processeur = "Intel Core 2 Duo 3.0GHz, (FSB 1333MH, cache 8Mo)..."
$Os = "Windows VISTA Business 64-Bit Edition OEM"

(par exemple, et en imaginant qu'il y a aussi les Trademark et le Registred...)

Je voudrais que le logo se place automatiquement en fonction de la variable reçue.

Dans cet exemple, je dois recevoir le "Logo Intel Core 2 Duo" et le logo "Windows VISTA Business 64Bit"

Je voudrais :
1) Retirer de la variable tous les caractères qui en sont pas alphanumériques (str_replace ?)
2) Rechercher chacun des mots afin de générer l'URL du logo (qui est bien définie dans ma BDD)

Quelqu'un pourrait-il m'aider svp ?

Merci beaucoup d'avance.


Ju'

10 réponses

payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
26 août 2009 à 10:14
salut !

bon j'ai trouvé ma solution,

// fonction me permettant de remplacer tous les caracteres non alphanumériques, et ensuite les mettre en majuscule
function garde_alphanumerique( $chaine )
{
  $alphanumerique = "";
  for( $i = 0 ; $i < strlen( $chaine ) ; $i++ )
  {
    $Lettre = substr( $chaine, $i, 1 );
    if( ( $Lettre >= 'a' && $Lettre <= 'z' ) ||
        ( $Lettre >= 'A' && $Lettre <= 'Z' ) ||
        ( $Lettre >= '0' && $Lettre <= '9' ) )
    {
      $alphanumerique .= $Lettre;
    }
  }
  return strtoupper($alphanumerique);
}


et

// fonction de recherche de caracteres
function recherche( $chaine, $sous_chaine )
{
  return strstr( $chaine, $sous_chaine ) != false;
}


$MaVariableRecupere = garde_alphanumerique( $MaVariableRecupere );
// Exemple de filtre avec windows VISTA Business
if( recherche( $MaVariableRecupere, "VISTA" ) && recherche( $MaVariableRecupere, "BUSINESS" ) ) 
{
  $Counter += 1;
  $logo = "vista_logo_business.jpg";
  echo "";
}


J'ai dû me creuser un peu, mais la solution n'était pas forcément évidente. En fait c'est toi qui m'as mis sur la voix, et ça marche très bien.

Le $Counter me permet de savoir combien de logos ont été placés, pour organiser le placement des autres logos (intel, nvidia et autres..) sur la page en fonction du nombre de logos, dans la suite de mon programme.

Donvc voilà j'ai tout ce qu'il me faut : arriver à placer un logo d'un constructeur en fonction de ce qu'il y a marqué dans la base.


Merci bcp.
Bonne journée.

Ju'

ps: tu le trouves comment mon code ?
3
kiki2sirom Messages postés 153 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 23 décembre 2010
26 août 2009 à 10:32
salut,

une chose me frappe :

for( $i = 0 ; $i < strlen( $chaine ) ; $i++ )

c'est pas bon question optimisation, et ce sera préjudiciable pour des longues chaines de caractères (très longue alors...

Tu recalcules systématiquement la taille de ta chaîne à chaque tour de boucle.

fais plutôt du style

for( $i 0 ,$taille strlen( $chaine ); $i < $taille ; $i++ )

Il faut prendre l'habitude de le faire.

kiki
3
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
25 août 2009 à 09:39
Bonjour,

As tu regardé coté REGEX :

<?php
$string = 'Intel Core 2 Duo 3.0GHz, (FSB 1333MH, cache 8Mo)...';
$string = preg_replace("[^a-zA-Z0-9]", "", $string);
echo $string;
// IntelCoreDuoGHzFSBMHcacheMo

// Ou pour garder les éspaces

$string = 'Intel Core 2 Duo 3.0GHz, (FSB 1333MH, cache 8Mo)...';
$string = preg_replace("[^a-zA-Z0-9\ ]", "", $string);
echo $string;
// Intel Core  Duo GHz FSB MH cache Mo
?>




Tonio
2
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
26 août 2009 à 15:23
Je m'étais planté dans mon code :
<?php
function garde_alphanumerique( $chaine )
{
  return preg_replace("/[^A-Z0-9]/i", "", strtoupper($chaine));
}
?>

J'avais pas pu le tester...

Tu peux même faire juste une fonction chercher :

<?php
function recherche( $sujet, $pattern )
{
  return strstr(preg_replace("/[^A-Z0-9]/i", "", strtoupper($sujet)), $pattern) != false;
}
?>


Min iPomme
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
25 août 2009 à 12:54
Hello et merci de ta réponse, et effectivement la e solution sans les espaces, c'est axactement ça qui m'interesse.

arf pour moi ça ne marche pas

$os = str_replace("[^A-Z0-9\ ]"", $os);
echo $os;

(j'avais oublié de dire qu'il ne me fallait que les majuscules)

la chaine n'as pas changé. (la variable est déjà remplie par la base)

Vois-tu d'ou ça vient ?
Et c'est quoi al différence entre preg_replace et str_replace ?

Merci

Ju'
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
25 août 2009 à 15:31
preg_replace
str_replace
Je suis pas sur que le str_replace prenne une REGEX en 1er argument...

Ca ne fonctionne pas avec str_replace ?

Tonio
0
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
26 août 2009 à 16:13
merci vous 2 pour la réponse.
Je ne savais pas qu'on pouvais mettre 2 conditions dans la 1ere conditions du for, c'est bon a savoir.


Et merci tonio pour ce résumé en 2 ligne de ce que je me suis fais ch^^ a faire en 30... lol
0
Tonio_35 Messages postés 567 Date d'inscription mercredi 4 octobre 2006 Statut Membre Dernière intervention 30 août 2011 11
27 août 2009 à 08:58
Ca serais pas mal de faire un site/tuto ou cours sur l'optimisation du code php...

Bonne continuation en tout cas !

_________________________________
Min iPomme
0
kiki2sirom Messages postés 153 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 23 décembre 2010
27 août 2009 à 10:44
une petite précision :

ce n'est pas 2 conditions là :
for( $i 0 ,$taille strlen( $chaine ); $i < $taille ; $i++ )

$i 0 ,$taille strlen( $chaine )

ici on initialise $i à 0 et on affecte la taille de ta chaîne à $taille

ils sont bien séparés par des , et non des ;

le for c'est
for(initialisation; condition de continuité ; expression 3)
La première expression (initialisation) est interprétée au premier démarrage de la boucle. Elle ne sera exécutée qu'une seule fois (et non à chaque tour de boucle). On y place généralement l'initialisation des variables. La deuxième condition est appelée condition de continuité, on la place pour dire "si cette condition est respectée, alors la boucle peut continuer". La troisième expression sera elle interprétée à la fin de chaque tour de boucle. On y place généralement l'incrémentation d'une variable, mais vous pouvez y mettre n'importe quoi, faites attention cependant aux boucles infinies. On entend par boucle infinie une boucle qui ne s'arrête jamais. Outre le fait de monopoliser le processeur, votre script ne s'arrêtera pas en fonction de la configuration de PHP.
vu sur le site vulgarisation-informatique.com


M'enfin je pense que tu avais saisi le principe.

A+
kiki
0
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
27 août 2009 à 14:41
d'accord bah tu vois je ne savais pas tout ça

merci beaucoup.

Et pour te répondre sur le cours/tuto Tonio, perso je ne me sens pas chaud du tout pour la simple et bonne raison que je ne suis pas assez "bon" pour prétendre faire une chose pareille, et le manque de temps aussi à prendre en compte.

Si je pouvais, je le ferais crois moi tonio ;)


Agréable fin de journée a tous et merci encore.

@+

Ju'
0
Rejoignez-nous