[RESOLU] Problème avec substr_count...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème avec substr_count...

Re: Problème avec substr_count...

par Piair » 02 juil. 2021, 16:19

Je me permets un nouveau message pour une déclaration de taille... tu es un génie!!!

Code : Tout sélectionner

foreach ($tmp_ref_net as $value) //On parcourt les références web enregistrées { for($i=0; $i < count($ref); $i++) { if(strpos($ref[$i],str_replace(' ','',$value)) !== false && strpos($ref[$i],str_replace(' ','',$value)) <= 0 ) //On a une référence qui contient la référence du produit initial && en début de chaine { echo 'Occurence trouvée: '; } } }
... ne génère plus d'erreur. Il y avait des espaces!
Un tout grand merci.

Re: Problème avec substr_count...

par Piair » 02 juil. 2021, 16:02

Bonjour... Merci pour ta réponse...

J'ai légèrement modifié le code (foreach est devenu un for et substr_count un strpos...)... le résultat est le même

Code : Tout sélectionner

for($k=0; $k < count($tmp_ref_net); $k++) //On parcours les références web enregistrées { for($i=0; $i < count($ref); $i++) { echo 'VALUE= '.$tmp_ref_net[$k].' et REF['.$i.']= '.$ref[$i].'<BR>'; if(strpos($ref[$i],'LLCONBCF') !== false && strpos($ref[$i],'LLCONBCF') <= 0 ) //On a une référence qui contient la référence du produit initial && en début de chaine { $rest = substr($ref[$i], strlen($tmp_ref_net[$k]), 3); echo 'Occurence trouvée: '; } } }
Comme tu le constateras les deux sont en majuscules. Ai testé avec stripos ceci dit, même résultat...

EDIT: Pour les espaces tu as raison, il y avait un espace à la fin de la chaine que j'utilise pour faire les comparaison.
Chose étonnante également je viens de découvrir un truc bizarre echo strlen($tmp_ref_net[$k]); qui contient donc la chaine à rechercher renvoit une longueur de 25... la chaine ne fait pourtant que 8 caractères :shock:

Si je laisse la chaine "LLCONBCF" en clair voici ce que j'obtiens à l'affichage:
https://drive.google.com/file/d/1HTgvfb ... sp=sharing

Si je change par $tmp_ref_net[$k] ça ne fonctionne plus...

Un problème de typage ? Les deux sont pourtant en string quand je les affiche avec var_dump...

Re: Problème avec substr_count...

par Ryle » 02 juil. 2021, 15:50

Salutations !

Il n'y a pas de différence entre passer une chaine de caractère en paramètre d'une fonction, ou placer cette même chaine de caractère dans une variable et utiliser ensuite cette variable lors de l'appel à la fonction. Si le comportement diffère, c'est que les valeurs diffèrent :)
$pos = substr_count($ref[$i], 'LLCON');
// et 
$value = 'LLCON';
$pos = substr_count($ref[$i], $value);
// donneront un résultat strictement identique
Es-tu sûr de la valeur de $value ? (pas d'espace avant ou après ?)
La fonction de recherche est sensible à la casse, as-tu vérifier qu'il n'y avait pas de majuscules / minuscules qui pourraient différer ?
Essayes d'afficher tes valeurs pour vérifier visuellement qu'elles correspondent à ce que tu attends (autant côté $value que $ref[$i] :))

Problème avec substr_count...

par Piair » 02 juil. 2021, 15:13

Bonjour à tous,

Je me tourne vers vous parce que je tourne en rond avec ce qui est sans doute une bêtise... que je ne trouve pas! =P~

Dans le code ci dessous si j'écris $pos = substr_count($ref[$i], 'LLCON') toute les entrées contenant ce texte dans l'array $ref sont détectées. Mais si j'écris $pos = substr_count($ref[$i], $value); ce n'est plus le cas. Ce sont pourtant deux string.

Code : Tout sélectionner

$j=0; for($i=0; $i<$nbre_resultats; $i++) { //echo $i.'Num: '.$num[$i].' REF: '.$ref[$i].' et xusrnet: '.$xusrnet[$i].'<BR>'; if($xusrnet[$i]==1) //Vente web ? { $tmp_ref_net[$j]=$ref[$i]; $j++; } } foreach($tmp_ref_net as $value) //On parcours les références web enregistrées { for($i=0; $i < count($ref); $i++) { $pos = substr_count($ref[$i], $value); if ($pos == 0) { echo "La chaîne '$value' ne se trouve pas dans la chaîne '$ref[$i]'".'<BR>'; } else { echo "La chaine '$value' a été trouvée dans la chaîne '$ref[$i]'".'<BR>'; } } }
Comment se fait-il que cela fonctionne si j'écris la chaine de comparaison en clair et pas sous forme de variable ?

Par contre, si je laisse l'écriture avec $value il ne détecte que l'occurence exacte... donc si $value vaut "ABCDE" il le détectera mais ne donnera rien pour "ABCDEF"

D'avance un tout grand merci,
Là je commence à m'arracher les cheveux :cry: