Aller au contenu

compter le nombre de cadoc dans $letexte


Lentreprenaute

Sujets conseillés

Hello,

je comprends pas l'exemple ci-dessous me retourne bien 2

$toto="cadoc cadoc";

$nb_ligne=substr_count($toto, "cadoc");

$toto=$letexte;

$nb_ligne=substr_count($toto, "cadoc"); me retourne 0

$nb_ligne=substr_count($letexte, "cadoc"); me retourne 0

extrait de $letexte, j'ai plusieurs cadoc comme ci-dessous!

<td> Cadoc </td> qui sont bien dans le texte!

Florent, qui ne chome pas!

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

tout d'abord :

Entre cadoc et Cadoc, il y a une différence. La majuscule.

Et... Oh, surprise, substr_count est sensible à la casse, autrement dit, il fait la différence entre les majsucules et les minuscules.

Une solution peut consister en l'emploi de strtolower, qui convertit le texte en minuscule. Tu convertit, puis tu comptes.

$nb_ligne=substr_count($letexte, "cadoc"); me retourne 0 ?

$nb_ligne=substr_count(strtolower($letexte), "cadoc"); me retourne 2

Attention :

La fonction substr_count (hormis les majuscules/minuscules), comptes les occurences trouvées, meme à l'intérieur d'un mot.

print substr_count("Ceci est un test","es"); // retourne 2

print substr_count("Ceci Est un test","es"); // retourne 1

print substr_count(strtolower("Ceci Est un test"),"es"); // retourne 2

Sinon, il reste les expressions régulières :

Je te laisse faire les essais =>

if (ereg("(es)","es est Est test tEst",$reg)){

foreach($reg as $k => $v){

  echo"<br>".$v;

  }

echo "<p>reg = ".$reg;

echo "<p>nb de reg = ".count($reg);

}

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour anonymus,

j'ai laissé tomber la méthode du cadoc avec substr_count, et j'ai utilisé

split & count, sinon j'ai pas super bien compris ton exemple du dessus,

tu en penses quoi de mon bo code, sinon une question bete mais si c'etait faisable ce serait top!

par defaut je compte le nombre de ligne & de tableau present dans la var $letexte,

et je fais une moyenne pour definir une valeur , penses tu qu'il soit possible, de compter isolement les lignes des tables pour renvoyer une hauteur differente à chacun en fonction de leur nombres de lignes respectives?

Florent

 // compte les tableaux
$x_table=split("table class=\"general", $letexte);
$nb_tableau = count($x_table);

// compte les lignes des tableaux
$x_ligne=split("tr class=\"row_", $letexte);
   $nb_ligne = count($x_ligne);

// hauteur des lignes des tableaux
$nb_ligne *= 30;
 
// calcul  la hauteur d'un tableau en fonction du nombre de lignes/tableaux
$t_height=$nb_ligne;
if($nb_tableau > 0){$t_height/=$nb_tableau;}
$t_height=round($t_height);
$t_height.="px";

Lien vers le commentaire
Partager sur d’autres sites

1/

C'est apparemment bon, sinon que...

Si ton fichier a un seul tableau appelé table class=\"general, et un autre, appelé table class=\"caporal, ton nombre de lignes dans tr class=\"row ne correspondra pas forcément à ce que tu veux compter. Autrement dit, tu pourrais compter des lignes qui ne seraient pas des lignes du tableau que tu désires compter.

2/

Dans les lignes :

  $nb_ligne = count($x_ligne);

// hauteur des lignes des tableaux

$nb_ligne *= 30;

// calcul  la hauteur d'un tableau en fonction du nombre de lignes/tableaux

$t_height=$nb_ligne;

if($nb_tableau > 0){$t_height/=$nb_tableau;}

tu peux réduire en

if($nb_tableau > 0){(30*count($x_ligne))/=$nb_tableau;}

mais c'est toi qui voit ;)

3/

Si tu as 5 mn, essaie ce programme, toutes les lignes renvoient le meme résultat :

$txt="les Es estait essat es";

$pattern="es";

echo"---------------<br>";

print substr_count(strtolower($txt), $pattern);

echo"<br>---------------<br>";

$x_table=split($pattern, $txt);

$nb_tableau = count($x_table);

echo $nb_tableau;

echo"<br>---------------<br>";

$nb_tableau = count(split($pattern, $txt));

echo $nb_tableau;

echo"<br>---------------<br>";

4/

Que dire de plus ?

Que la commande split renvoie toujours au moins "1" (sauf en cas d'erreurs, mais là, ca plante tout ;) ), et que donc la valeur $nb_tableau sera toujours >0. Exemple :

$txt="";

$mask=" ";

$nb_tableau = count(split($mask, $txt));

echo"<p>nb tableau=".$nb_tableau;

C'est pareil pour $t_height;

Voilà, Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Au fait :

1/

Si la commande 'round' arrondit à l'entier le plus près, la commande 'ceil' arrondit à l'entier supérieur, ce qui devrait plus te satisfaire.

2/

Imagines les variables suivantes :

$txt="tabl sqkfjm";
$masque1="tabl";
$masque2="tr";

Tu te retrouves avec le cas suivant

// ( le meme que le tien : )
$nb_tableau = count(split($masque1, $txt));
if(($nb_tableau>0)){
$t_height=ceil(count(split($masque2, $txt))*30 / $nb_tableau)." px";
}
else{
$t_height="0 px";
}

echo "<br>nb_tableau : ".$nb_tableau;
echo"<br>-height = $t_height";
echo"<br>-----------------------<br>";
echo"<br> cas n° 2 <br>";
$nb_tableau = count(split($masque1, $txt)) - 1;
if(($nb_tableau>0)){
$t_height=ceil(count(split($masque2, $txt))*30 / $nb_tableau)." px";
}
else{
$t_height="0 px";
}
echo "<br>nb_tableau : ".$nb_tableau;
echo"<br>-height = ".$t_height;

Maintenant, modifies les valeurs des variables :

$txt="abl tr sqkfjm";
$masque1="tabl";
$masque2="tr";

tu essaie avec $txt = "sfdq";

puis avec $txt = " tr ";

etc, tu verras que ca change beaucoup de choses ;)

Mais au fait, es tu sûr de ce que tu veux compter ?

Si le premier tableau possede 10 lignes, et ensuite, tu as 10 tableaux de 1 ligne, est tu sûr que ton programme adaptera la hauteur des lignes comme tu le souhaite ?

Voilà.

Lien vers le commentaire
Partager sur d’autres sites

Mais au fait, es tu sûr de ce que tu veux compter ?

Si le premier tableau possede 10 lignes, et ensuite, tu as 10 tableaux de 1 ligne, est tu sûr que ton programme adaptera la hauteur des lignes comme tu le souhaite ?

salut anonymus,

Va falloir que je me concentre sur tout ces bouts de codes, j'adore la ligne qui reduit tout "if($nb_tableau > 0){(30*count($x_ligne))/=$nb_tableau;}" :)

sinn tu souleves le probleme question que je posais en postant mon code!

je fais une moyenne sur les tableau/ lignes et a ton avis, est ce que l'on peut

compter les tableaux , compter les lignes et leur assigner une hauteur qui soient en fonction du nombres de lignes pour chaque?

ma var $letexte renvoie du html avec donc des tableaux class général & avec des tr row_X (0 ou 1 ou 2).

J'attends avec impatience ton retour ;)

Et un grand merci pour ton aide,

Florent

Lien vers le commentaire
Partager sur d’autres sites

Va falloir que je me concentre sur tout ces bouts de codes, j'adore la ligne qui reduit tout "if($nb_tableau > 0){(30*count($x_ligne))/=$nb_tableau;}" :)

je fais une moyenne sur les tableau/ lignes et a ton avis,  est ce que l'on peut compter les tableaux , compter les lignes et leur assigner une hauteur qui soient en fonction du nombres de lignes pour chaque?

Tu peux très bien imaginer un $t_height en forme de tableau :

$t_height[numero_tableau], et ensuite, la sortie sera de la forme :

echo"<br>-height[".$numero_tableau."] = ".$t_height;

bon courage ;)

Pour le '1', ca parait abscond, mais c'est une question d'habitude. Si tu réduis constamment, tu finira par le lire facilement. Le tout est de ne pas se tromper :)

Pour le '2' : Honnetement, c'est "casse gueule".

Je préfèrerais séparer les tableaux, mais alors il faut gérer les 'piles', et c'est plus délicat. D'une manière générale, tout dépend des tableaux que tu as au départ, et de ce que tu veux sortir à l'arrivée. Si tu mélanges des tableaux de fruits et légumes, c'est pas génant, mais si tu mélanges des tableaux de légumes avec les cours de la bourse, ca rime plus à rien à l'arrivée :(

Tu peux très bien imaginer un $t_height[numero_tableau], et en sortie tu auras :

echo"<br>-height_".$numero_tableau." = ".$t_height['numero_tableau'];

(un truc comme ca)

Bon courage ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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