Médiaforma

All posts tagged filtrer

Énoncé de l’exercice

Définissez une fonction qui filtre les adresses mail afin de n’afficher que les adresses valides.

Les adresses à filtrer se trouvent dans ce tableau numéroté :

$adresses = array("nom.com", "nom@fai.com", "nom@fai", "nom.prenom@fai.com", "nom@fai.fr", "nom@t.fr");

Pour qu’une adresse mail soit considérée comme valide, elle doit respecter les trois conditions suivantes :

  • Contenir un caractère “@”
  • Contenir au moins un caractère “.”
  • Comporter au moins trois caractères entre le @ et le dernier point

Pour résoudre ces problèmes, vous aurez besoin des fonctions suivantes :

  • strpos(chaine, rech) qui retourne la première position de rech dans chaine
  • strrpos(chaine, rech) qui retourne la dernière position de rech dans chaine

Solution

Faites une pause dans la vidéo pour vous permettre de saisir le code. Poursuivez la vidéo pour voir la solution.

Dans un premier temps, le tableau $adresses est défini.

Dans un deuxième temps, le tableau est filtré avec la fonction array_filter.

Enfin, dans un troisième temps, les données contenues dans le tableau filtré, c’est-à-dire les adresses e-mail valides, sont affichées.

Examinons la fonction filtreEmail.

Le caractère @ est recherché dans la chaîne passée en argument. Si le résultat retourné pat la fonction strpos est nul, le caractère @ n’a pas été trouvé.

La position du dernier point dans la chaîne est alors recherchée avec la fonction strrpos.

Si le caractère @ a été trouvé, si un point décimal a été trouvé et s’il est distant du @ d’au moins trois caractères, l’adresse email est considérée valide. La valeur true est alors retournée. L’adresse email est donc conservée dans le tableau résultat.

Dans le cas contraire, l’adresse email est invalide. Dans ce cas, la valeur false est retournée, ce qui provoque la suppression de l’adresse du tableau résultat.

<?php
  function filtreEmail($data){
    $arobas = strpos($data, "@");
    $dernierPoint = strrpos($data,".");
    if (($arobas!=false) &&
      ($dernierPoint!=false) &&
      ($dernierPoint - $arobas >= 3))
    return true;
    else
    return false;
  }

  $adresses = array("nom.com", "nom@fai.com", "nom@fai", "nom.prenom@fai.com", "nom@fai.fr", "nom@t.fr");
  $adressesValides = array_filter($adresses, "filtreEmail");
  foreach($adressesValides as $element)
    echo $element."<br>";
?>

 


Supposons que vous récupériez de nombreuses données dans un tableau. Certaines de ces données sont peut-être erronées ou ne présentent aucun intérêt pour vous. Vous pouvez les filtrer en utilisant la fonction array_filter() :

array_filter($tableau, fonction);

où tableau est le tableau à filtrer et fonction est une chaîne qui représente le nom d’une fonction appliquée à chaque élément du tableau. Si la valeur retournée par la fonction est true, l’élément est retenu. Dans le cas contraire, l’élément n’est pas retenu.

Exemple sur un tableau numéroté

<?php
  function afficheImpair($data){
    return ($data & 1);
}

  $tableau = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
  $tableau_filtre = array_filter($tableau,"afficheImpair");
  foreach($tableau_filtre as $element)
    echo $element."<br>";
?>

Remarque

La fonction afficheImpair() doit retourner une valeur égale à true pour les nombres impairs et à false pour les nombres pairs. En effectuant un ET logique entre l’élément du tableau et 1 ($data & 1), c’est bien ce qui est retourné par la fonction.

Prenons le nombre impair 15. Sa version binaire est 00001111. Si nous effectuons un ET logique avec 00000001, le résultat est différent de 0, et donc égal à true. Prenons le nombre pair 12. Sa version binaire est 00001100. Si nous effectuons un ET logique avec 00000001, le résultat est nul, et donc égal à false. Il est facile d’étendre ce raisonnement à tous les nombres pairs et impairs.

Exemple sur un tableau associatif

Le principe est le même, mais ici, le tableau est filtré sur les valeurs des couples clé=>valeur :

<?php
  function afficheImpair($data){
    return ($data & 1);
}

  $tableau = array("un"=>1, "deux"=>2, "trois"=>3, "quatre"=>4, "cinq"=>5);
  $tableau_filtre = array_filter($tableau,"afficheImpair");
  foreach($tableau_filtre as $cle=>$valeur)
    echo $cle."<br>";
?>


Cliquez ici pour accéder à tous les sujets sur Excel 2010

En filtrant les données d’une feuille, vous pouvez très facilement restreindre leur nombre pour n’afficher que celles qui répondent à un ou plusieurs critères.

Cliquez sur une cellule dans la plage que vous souhaitez filtrer. Sélectionnez l’onglet Accueil dans le Ruban. Cliquez sur l’icône Trier et filtrer dans le groupe Edition puis choisissez Filtre dans le menu. De petites flèches apparaissent à côté de chaque en-tête de colonne. Cliquez sur la flèche de la colonne que vous voulez filtrer. Vous pouvez :

  1. Limiter les données affichées en décochant une ou plusieurs cases.
  2. Utiliser, selon le type des données, un filtre textuel ou numérique.

Bien entendu, il est possible de cumuler plusieurs filtres en agissant sur plusieurs colonnes.

Pour annuler un filtre dans une colonne, déroulez la liste correspondante et sélectionnez Effacer le filtre.

Enfin, pour arrêter le filtrage des données, cliquez sur l’icône Trier et filtrer du groupe Edition, puis choisissez Filtrer dans le menu.