Garder uniquement les caracteres alphanumerique d'une variable recupérée [Résolu]

payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 24 août 2009 à 18:02 - Dernière réponse : payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention
- 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'
Afficher la suite 

10 réponses

Répondre au sujet
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 26 août 2009 à 10:14
+3
Utile
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 ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de payetonju
kiki2sirom 153 Messages postés mardi 17 août 2004Date d'inscription 23 décembre 2010 Dernière intervention - 26 août 2009 à 10:32
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de kiki2sirom
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 25 août 2009 à 09:39
+2
Utile
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
Commenter la réponse de Tonio_35
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 26 août 2009 à 15:23
+2
Utile
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
Commenter la réponse de Tonio_35
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 25 août 2009 à 12:54
0
Utile
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'
Commenter la réponse de payetonju
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 25 août 2009 à 15:31
0
Utile
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
Commenter la réponse de Tonio_35
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 26 août 2009 à 16:13
0
Utile
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
Commenter la réponse de payetonju
Tonio_35 567 Messages postés mercredi 4 octobre 2006Date d'inscription 30 août 2011 Dernière intervention - 27 août 2009 à 08:58
0
Utile
Ca serais pas mal de faire un site/tuto ou cours sur l'optimisation du code php...

Bonne continuation en tout cas !

_________________________________
Min iPomme
Commenter la réponse de Tonio_35
kiki2sirom 153 Messages postés mardi 17 août 2004Date d'inscription 23 décembre 2010 Dernière intervention - 27 août 2009 à 10:44
0
Utile
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
Commenter la réponse de kiki2sirom
payetonju 437 Messages postés mercredi 26 septembre 2007Date d'inscription 2 juillet 2014 Dernière intervention - 27 août 2009 à 14:41
0
Utile
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'
Commenter la réponse de payetonju

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.