To search a needle in a PHP haystack

Publié dans PHP | Marqué avec ,
Share

Vous connaissez l’expression « Chercher une aiguille dans une meule de foin » ? Figurez-vous qu’elle existe aussi en anglais « To search a needle in a haystack » ! Et vu que ça peut se traduire mot à mot, je soupçonne nos amis anglais de nous l’avoir piqué… Oui, c’est gratuit 😉

Mais saviez-vous que cette expression existe aussi en PHP ?
Prenons l’exemple de la fonction in_array qui permet de vérifier l’existence d’un élément dans un tableau.

$haystack = array('cow', 'duck', 'pig');
$needle = 'cow';
if (in_array($needle, $haystack)) {
 echo 'Oh yeah!';
}
else {
 echo 'What?';
}

Et c’est la documentation PHP officielle qui utilise « needle » et « haystack » comme nom de variables !

bool in_array( mixed $needle , array $haystack)

Il faut dire que cela correspond vraiment à l’expression 🙂

Là où le bas blesse (ahah !), ce que plusieurs fonctions PHP font leur pis aller de cette métaphore, mais pas toutes dans le même ordre !
Chercher une aiguille dans une meule de foin : les fonctions ayant traits aux array

  • in_array($needle, $haystack) : vérifier que $needle existe
  • array_search($needle, $haystack) : vérifier que $needle existe, et retourne sa clé

Dans une meule de foin, chercher une aiguille : les fonction ayant traits aux string

  • strstr($haystack, $needle) : première occurrence de $needle dans une string
  • strchr($haystack, $needle) : dernière occurrence du caractère $needle dans une string
  • strpos / strrpos($haystack, $needle) : position de la première / dernière occurrence de $needle dans une string
  • substr_count($haystack, $needle) : nombre d’occurrences de $needle dans une string

Une expression, un « fun-fact » et un « tips », tout ça dans le même billet !

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*