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

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

Votre réponse

10 réponses

Meilleure réponse
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Dernière intervention
2 juillet 2014
3
Merci
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 ?

Merci payetonju 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de payetonju
Messages postés
153
Date d'inscription
mardi 17 août 2004
Dernière intervention
23 décembre 2010
3
Merci
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

Merci kiki2sirom 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de kiki2sirom
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Dernière intervention
30 août 2011
2
Merci
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
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Dernière intervention
30 août 2011
2
Merci
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
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Dernière intervention
2 juillet 2014
0
Merci
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
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Dernière intervention
30 août 2011
0
Merci
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
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Dernière intervention
2 juillet 2014
0
Merci
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
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Dernière intervention
30 août 2011
0
Merci
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
Messages postés
153
Date d'inscription
mardi 17 août 2004
Dernière intervention
23 décembre 2010
0
Merci
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
Messages postés
437
Date d'inscription
mercredi 26 septembre 2007
Dernière intervention
2 juillet 2014
0
Merci
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.