Aller au contenu

Comparer une valeur dans un tableau


Sujets conseillés

Posté

Salut les ami(e)s,

c'est la premùiere fois que je poste dans cette rubrique, je programme pas tres souvent en PHP, mais ca m'arrive :blush:

Voila j'ai ecris un script qui fonctionne, mais je le trouve pas tres optimisé, alors je me demande s'il y a pas une meilleurs methode.

Le but du script est de verifier qu'un numero de Tel (tapé par un utilisateur dans un formulaire) appartient bien a une plage de n° de Tel (plusieurs plages de n° en fait)

Voila mon script :

function numerotel($tel) 
{
// Vérifie que le numero de telephone est bien dans la plage spécifiée

$parti1 = substr($tel,0,3);
if ($parti1<>"027" AND $parti1<>"046") {
  //echo $parti;
  return false;
}
$parti = substr($tel,0,5);
if ($parti=="02772") {
  $tabl = range (1000,6999);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="02777") {
  $tabl = range (0000,9999);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="02773") {
  $tabl = range (0000,5999);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="02776") {
  $tabl = range (6000,9999);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="04642") {
  $tabl = range (1000,4299);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="04645") {
  $tabl = range (1000,3939);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="04645") {
  $tabl = range (9100,9599);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
if ($parti=="04641") {
  $tabl = range (1000,8999);
  if (in_array(substr($tel,5), $tabl)) {
         return true;
  }
}
return false;
}

J'explique mon code : tout les numeros commancent par "027" ou "046" , d'ou le premier test, le reste des tests verifient le reste du numero,

Exemple de 2 plages : 027721000 à 027726999

027766000 à 027769999

Voila j'espere que j'ai bien expliqué, et Merci d'avance B)

Posté

Salut,

Tes tests ne semblent effectivement pas optimisés :

1) Tu testes d'abord les 3 premiers chiffres, afin d'éviter de tester les autres s'ils ne rentrent pas dans le champ de tes recherches. Ca, c'est bien.

2) Pour tes tests suivants, qui impliquent systématiquement les 5 premiers chiffres, il est inutile de les enchaîner ainsi, puisqu'ils sont mutuellement exclusifs : si un réussit, les autres échoueront forcément, il est donc inutile de les faire. Tu pourrais donc utiliser une structure en elseif ou (mais je ne sais plus si ça marche avec les chaînes de caractères) un switch pour traiter les différents cas sans faire de tests inutiles.

3) Puisque tu testes qu'une chaîne de caractères est bien d'une certanie forme, les expressions régulières seraient probablement une solution intéressante.

Posté

Salut Marvi, merci pour ta reponse,

je repond a tes remarques :

2) Pour tes tests suivants, qui impliquent systématiquement les 5 premiers chiffres, il est inutile de les enchaîner ainsi, puisqu'ils sont mutuellement exclusifs : si un réussit, les autres échoueront forcément, il est donc inutile de les faire. Tu pourrais donc utiliser une structure en elseif ou (mais je ne sais plus si ça marche avec les chaînes de caractères) un switch pour traiter les différents cas sans faire de tests inutiles.

Avec chaque if il y a un "retourn true" s'il est vériefié, donc il ne fait pas le reste les tests qui suivent, le seul cas ou il fait tout les tests c'est dans le cas où le numero est dans le dernier cas de test.

je vais essayer le cas du switch ^_^

3) Puisque tu testes qu'une chaîne de caractères est bien d'une certanie forme, les expressions régulières seraient probablement une solution intéressante.

Je vois pas comment?

En tout cas tu comprend pourquoi je pose la question, il y a plusieurs façons de faire la meme chose en php, j'en ai trouvé une , mais il doit y en avoir d'autres meilleurs mais que je connait pas, alors des suggestions ou des pistes a étudier?

Posté

Merci Black_Shade pour ces liens, effectivement j'ai jamais bossé avec les expressions régulières :lol:

je vais etudier ca.

Posté (modifié)

Je viens de faire des tests avec le "switch" et ca marche, donc déja un script plus logique et plus efficace,

Pour les expressions réguliére j'étudie encore la question pour voir comment l'appliquer dans mon cas, en tout cas je vous tiens au courant et Merci encore :lol:

Voila la fonction modifié :

	function numerotel($tel) 
{
// Vérifie que le numero de telephone est bien dans la plage spécifiée

$parti1 = substr($tel,0,3);
if ($parti1<>"027" AND $parti1<>"046") {
 return false;
}
$parti = substr($tel,0,5);
switch ($parti) {
case "02772":
   $tabl = range (1000,6999);
   if (in_array(substr($tel,5), $tabl)) {
         return true;
   }
   break;
case "02777":
   $tabl = range (0000,9999);
   if (in_array(substr($tel,5), $tabl)) {
         return true;
   }
   break;
case "02773":
   $tabl = range (0000,5999);
   if (in_array(substr($tel,5), $tabl)) {
         return true;
   }
   break;
case "02776":
 $tabl = range (6000,9999);
 if (in_array(substr($tel,5), $tabl)) {
         return true;
 }
 break;
case "04642":
 $tabl = range (1000,4299);
 if (in_array(substr($tel,5), $tabl)) {
         return true;
 }
 break;
case "04645":
 $tabl = range (1000,3939);
 $tabl1 = range (9100,9599);
 if (in_array(substr($tel,5), $tabl) OR in_array(substr($tel,5), $tabl1)) {
         return true;
 }
 break;
case "04641":
 $tabl = range (1000,8999);
 if (in_array(substr($tel,5), $tabl)) {
         return true;
 }
}
return false;
}

Modifié par dragondz

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...