Version complète: sur le forum Webmaster Hub : compter le nombre de cadoc dans $letexte
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Lentreprenaute
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!
Anonymus
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 =>

CITATION
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.
Lentreprenaute
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




CODE
// 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";
Anonymus
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 :
CITATION
  $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
CITATION
if($nb_tableau > 0){(30*count($x_ligne))/=$nb_tableau;}


mais c'est toi qui voit wink.gif

3/
Si tu as 5 mn, essaie ce programme, toutes les lignes renvoient le meme résultat :
CITATION
$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 wink.gif ), et que donc la valeur $nb_tableau sera toujours >0. Exemple :
CITATION
$txt="";
$mask=" ";
$nb_tableau = count(split($mask, $txt));
echo"<p>nb tableau=".$nb_tableau;

C'est pareil pour $t_height;

Voilà, Anonymus.
Anonymus
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 :
CODE
$txt="tabl sqkfjm";
$masque1="tabl";
$masque2="tr";


Tu te retrouves avec le cas suivant
CODE
// ( 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 :
CODE
$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 wink.gif

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à.
Lentreprenaute
CITATION
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;}" smile.gif

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 wink.gif

Et un grand merci pour ton aide,
Florent
Anonymus
CITATION(Lentreprenaute @ dimanche 29 février 2004, 18:02)
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;}" smile.gif

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 wink.gif

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 smile.gif

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 sad.gif

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 wink.gif
Lentreprenaute
salut anonymous,

la , je ne vois pas, du tout comment faire? blush.gif

CITATION
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'];


Florent
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.