encore avec mes arrays !!

encore avec mes arrays !! - PHP - Programmation

Marsh Posté le 05-07-2010 à 08:19:38    

je vois que ce code ne "marche pas" cependant j'aimerais trouver une solution si elle existe !
 

Code :
  1. $tableau = array("azertyuiop","qsdfghjklm" );
  2. if (  (in_array("az", $tableau)) === FALSE  )
  3.      {
  4.      echo 'pas dedans';
  5.      }
  6. if (  (!in_array("az", $tableau_affiche)) !== FALSE  )
  7.      {
  8.      echo 'dedans';
  9.      }


 
chercher un bout de chaine dans les valeurs d'un tableau ? hu ? ha ha !!
si vous avez la soluce, grand merci !


---------------
http://www.ypikay.com
Reply

Marsh Posté le 05-07-2010 à 08:19:38   

Reply

Marsh Posté le 05-07-2010 à 08:49:51    

Code :
  1. //Une petite fonction qui retourne un booléen et qui prend en paramètre un tableau ($arr) et la chaîne que tu recherches ($str)
  2. function string_in_array($arr, $str) {
  3. foreach ($arr as $k=>$v) {
  4. //si la chaîne se trouve dans une des valeurs du tableau, on retourne "true" et on arrête de boucler
  5. if (stristr($str, $v)!== FALSE) {
  6.     return true;
  7. }
  8. //fin de boucle, on a rien trouvé, on retourne "false"
  9. return false;
  10. }
  11. $tableau = array('azertyuiop', 'qsdfghjklm');
  12. if (string_in_array($tableau, 'az')) {
  13. bla bla bla
  14. }


 
Remarque : stristr, utilisé dans la fonction, n'est pas sensible à la casse. Si c'est important, utiliser strstr


Message édité par deliriumtremens le 05-07-2010 à 08:57:04
Reply

Marsh Posté le 05-07-2010 à 15:25:12    

"strpos" est censé consommer moins de ressource que "stristr" vu que "stristr" va faire une copie d'une partie de la chaine là où "strpos" se contentera de retourner un compteur. En fait, utiliser "strstr", c'est quasiment comme utiliser "strpos" et ensuite "substr".
 
erwan83 > Si tu as besoin plus tard des valeurs qui contiennent ton texte, tu as aussi "preg_grep" qui sera alors plus adapté.

Reply

Marsh Posté le 05-07-2010 à 18:41:40    

merci mais justement je voulais éviter de me cogner cette fonction foreach...
bon... tant pis !!!


---------------
http://www.ypikay.com
Reply

Marsh Posté le 05-07-2010 à 19:14:32    

erwan83 a écrit :

merci mais justement je voulais éviter de me cogner cette fonction foreach...
bon... tant pis !!!


Foreach n'est pas une fonction.

 

Tu peux utiliser array_filter aussi (qui elle est une fonction), mais je doute fort que tu l'apprécies [:dawa]

 

BTW pourquoi vous testez !== FALSE et === FALSE, in_array renvoie un booléen à la base, vous voulez quoi de plus, être certain qu'il n'y a pas un rayon cosmique qui vous transforme ça en string [:pingouino dei]

Message cité 1 fois
Message édité par masklinn le 05-07-2010 à 19:16:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-07-2010 à 19:54:43    

non non c'est une vieille habitude et les vieilles habitudes ont la peau dure !  :wahoo:


---------------
http://www.ypikay.com
Reply

Marsh Posté le 05-07-2010 à 22:24:49    

pour éviter le foreach, il y a moyen de travailler comme ceci:

Code :
  1. if (strpos(implode("@",$tableau),"az" ) !== false)
  2.   echo "Dedans";
  3. else
  4.   echo "Pas dedans";


attention que le séparateur (ici @) devrait être un caractère (ou une suite de caractères) qui ne se trouve pas dans les valeurs contenues dans le tableau.

Reply

Marsh Posté le 06-07-2010 à 14:08:07    

masklinn a écrit :


 
BTW pourquoi vous testez !== FALSE et === FALSE, in_array renvoie un booléen à la base, vous voulez quoi de plus, être certain qu'il n'y a pas un rayon cosmique qui vous transforme ça en string [:pingouino dei]


Parceque c'est plus performant  :D  
Tu gagnes 0,000000000001s par instruction

Reply

Marsh Posté le 07-07-2010 à 16:48:05    

On pinaille sur les perfs ?  :kaola:  
 
> juste pour strpos, j'ai fauté.
 
> (jeff@be) : dans ta solution, tu fais un implode : il ne parcourt pas le tableau, à ton avis (bouh les boucles cachées) ? Si je ne dis pas d'âneries, tu parcours tout le tableau, même s'il y a un résultat au premier index... Pas génial.
 
Perfs pinaillages : on ne fait pas de foreach, on fait un for  [:deliriumtremens]

Reply

Marsh Posté le 07-07-2010 à 17:35:07    

Je viens de faire des tests avec un tableau immense, la méthode avec implode est la plus rapide dans tous les cas. Que la chaine soit trouvée en début ou fin de tableau.


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 07-07-2010 à 17:35:07   

Reply

Marsh Posté le 07-07-2010 à 17:49:02    

Dj YeLL a écrit :

Je viens de faire des tests avec un tableau immense, la méthode avec implode est la plus rapide dans tous les cas. Que la chaine soit trouvée en début ou fin de tableau.


Ce qui semble peu choquant dans la mesure où, même si elle fait 2 itérations sur le tableau, tout est en C (qui est moins lent que PHP)


Message édité par masklinn le 07-07-2010 à 17:49:11

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-07-2010 à 22:41:19    

jeff@be a écrit :

pour éviter le foreach, il y a moyen de travailler comme ceci:

Code :
  1. if (strpos(implode("@",$tableau),"az" ) !== false)
  2.   echo "Dedans";
  3. else
  4.   echo "Pas dedans";


attention que le séparateur (ici @) devrait être un caractère (ou une suite de caractères) qui ne se trouve pas dans les valeurs contenues dans le tableau.


ha ca je vais essayer des dimanche ! (petite semaine de vacances)
merci !


---------------
http://www.ypikay.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed