ne pas compter les espace dans i++

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 : ne pas compter les espace dans i++

Re: ne pas compter les espace dans i++

par tycoons » 02 déc. 2011, 15:33

on y est presque la fonction de dix marche bien mais il manque un paramètre la il décompose bien les mots en lettre exemple: la vie est belle = la=l=a etc... mais si je veux compliquer un peut la chose avec un autre exemple si je voulais obtenir quelque chose comme :
la vie est belle.il y a du soleil? je voudrais obtenir sa :
la vie est belle (a la ligne)la=l=a etc..des que je croise une ponctuation je met la phrase a la ligne et je la découpe avec la fonction
il y a du soleil? a chaque ponctuation j obtiens une phrase qui ensuite et décomposer avec la fonction de dix j ai tester avec des regex mais pas de résultat avec un array des ponctuation sa marche pas non plus.J ai tester sa
$result=explode(".",$string);
$exclam=array();
$interro=array();
$str="";$i=0;$total=count($result);
for($i=0;$i<$total;$i++){
$exclam[$i]=explode("!",$result[$i]);
}
$i=0;$total=count($exclam);
for($i=0;$i<$total;$i++){
$interro[$i]=explode("?",$exclam[$i]);
}$total=count($interro);
for($i=0;$i<$total;$i++){echo $interro[$i]."<br/>";
}]
mais j ai des erreur et sa fait un peu beaucoup d 'explode

Re: ne pas compter les espace dans i++

par tycoons » 01 déc. 2011, 17:55

salut moogli ,
sorry pour le (e) :priere:
merci pour la soluce d affichage. la fonction marche mais pas exactement comme je veux le var dump tabres affiche rien et si je met chaine il compte bien
Je m exprime pas clairement pourtant dans ma tête de pioche c est claire :D .Je me disais qu'un array multiple serai peut être la soluce vu que je cherche a faire 3 truck dans le style chaine= phrase ,mot ,lettre.
pour faire simple le but finale et d attribuer une valeur à chaque mot grâce au lettre et a la phrase grâce au mot

Re: ne pas compter les espace dans i++

par moogli » 01 déc. 2011, 17:38

salut mooglie,
-e ^^
pour la fonction comment voire se que le table retourne pour vérifier?
var_dump ;)

heu sinon j'ai pas vraiment piger le pourquoi de la chose mais doit y avoir moyen de le faire ;)

@+

Re: ne pas compter les espace dans i++

par tycoons » 01 déc. 2011, 16:33

salut mooglie,
alors voila j ai plusieurs fichier en .txt (recette de cuisine) que je veux fouiller avec cette fonction je veux compter le nombre de caractère de chaque mot pour chaque phrase et leur attribuer un id puis les enregistrer en bdd le ($i) me sert d index pour l enregistrement sa me permet de chercher dans mes fichiers des phrases ou des mots et en même temps cela à un but instructif sur la manipulation de chaine.
si je reprend mon exemple:
"la vie est belle." et une phrase de quatre mot (id1 pour la phrase) que je peut décomposer mot 1= la (id2) etc.. lettre 1 du mot 1= id 3. je stop les phrases grâce à la ponctuation
cela me permet pour chaque phrase d avoir des id unique part type (phrase,mot,lettre).
bon vu que je suis loin d'être un spécialiste je m y prend peut être mal
pour la fonction comment voire se que le table retourne pour vérifier?

Re: ne pas compter les espace dans i++

par moogli » 01 déc. 2011, 15:59

Si tu nous disais ce que tu compte en faire ;)

Parce que bon, tu peux parcourir une chaine élément par élément (c'est a dire que tu a déjà la possibilité d'avoir un index pour chaque lettre).

Après je vois pas bien l'utilité de la chose, mais si tu l'indique cela sera plus simple :)

Pour l'utilisation de la fonction, celle ci retourne une table, tu ne peux pas faire un echo dessus !

essai
<?php
function attribuerToken($chaine){
   $chaineTab = explode(' ', $chaine);
   $token = 0;
   foreach($chaineTab as $mot){
     $token++;
     $tabRes[] = array($mot, $token);
     for($i=0; $i<strlen($mot); $i++){
       $token++;
       $tabRes[] = array($mot{$i}, $token);
     }
   }
   return $tabRes;
}
$chaine ="la vie est belle";
$ret = attribuerToken($chaine);
var_dump($ret);
?>
bon pas testé mais voila ce que tu peux en faire :)

@+

Re: ne pas compter les espace dans i++

par tycoons » 30 nov. 2011, 21:26

merci Dix2,
je vais tester tous sa.
Bon j ai tester ton code tel quel mais j'obtiens une belle page blanche .
je teste donc l affichage de la fonction avec
echo lafonction();
a la fin du script et là j ai des erreur:
Warning: Missing argument 1 for attribuertoken(), called
Notice: Undefined variable: chaine (hors ma chaine est bien placer avant ta fonction donc sa devrai matcher.)
Array

Code : Tout sélectionner

$chaine ="la vie est belle"; la fonctionquivabien($chaine); etc... echo lafonctionquivabien();
comprend pas là.? si il m affiche array c est bon signe il trouve un tableau mais vide

Re: ne pas compter les espace dans i++

par dix2 » 30 nov. 2011, 21:20

salut,

A priori, la fonction ci-dessous devrait te donner ce que tu recherches :
function attribuerToken($chaine){
  $chaineTab = explode(' ', $chaine);
  $token = 0;
  foreach($chaineTab as $mot){
    $token++;
    $tabRes[] = array($mot, $token);
    for($i=0; $i<strlen($mot); $i++){
      $token++;
      $tabRes[] = array($mot{$i}, $token);
    }
  }
  return $tabRes;
}
@+
dix2

Re: ne pas compter les espace dans i++

par tycoons » 30 nov. 2011, 20:55

salut mooglie,
un array_walk c est quoi cette bête là?
je vais t expliquer se que je veux faire je ne suis pas sur de bien m y prendre.J'ai un string de texte ou je veux séparée les mots puis pour chaque mots les lettres est leur attribuer un token par mot puis par lettre pour la futur étapes sa devrai ressembler à sa:
la =1
l=2
a=3
vie =4
v=5
i=6
e=7
j ai chercher sur google le array_walk je vais tester pour voir sinon mon code est comment? es se que je m y prend bien ou pas du tous?

Re: ne pas compter les espace dans i++

par moogli » 30 nov. 2011, 20:46

un array_walk pour virer les espaces ?

Re: ne pas compter les espace dans i++

par tycoons » 30 nov. 2011, 20:36

bon je vous montre mon code c est pas très beau et ne suis pas sur que c 'est parfait mais sa fonctione :
<?php 
$string = "la vie est belle" ; 
 $tok1=str_split($string);
$i=0;
foreach ($tok1 as $string) 
{  
$i++;
utf8_decode ($string ) ;
$string = preg_replace('/[\s]+/','<br />',$string);
$string = rtrim($string);
echo "$i $string  &nbsp; ";
 $str = strtok( $string, " \n\t\r");
} 
?>
voila pour l'instant sa me le sort comme poster dans mon premier post

Re: ne pas compter les espace dans i++

par moogli » 30 nov. 2011, 20:12

wé j'ai pas fait de trop zèle, mais bon faudrais prendre en compte les caractères non imprimable et heu ben c'est le même principe ;)

Re: ne pas compter les espace dans i++

par xTG » 30 nov. 2011, 20:08

Je pencherai plus sur la fonction empty() pour ma part, elle inclue beaucoup plus de cas de "vide".

Re: ne pas compter les espace dans i++

par moogli » 30 nov. 2011, 20:07

salut,

heu oui surement ça dépend de ton code :)
avec strlen c'est po simple

sinon tu peux utilise un for il suffit de tester le caractère
<?php
$s = 'LA VIE EST BELLE';
$nb = 0;
for ($i=0; $i < strlen($d); $i++) {
if ( $s[ $i ] != ' ') $nb++;
}
?>
@+

ne pas compter les espace dans i++

par tycoons » 30 nov. 2011, 19:32

bonjour à tous,
je me posais la question suivant: est il possible de ne pas compter les espaces dans une boucle avec i++? un petit exemple pour vous expliquer clairement:
je découpe une phrase en mot avec une incrémentation i++ sa me donne un string de se style:
1 L 2A 3
4V 5I 6E 7
8E 9S 10T 11
12B 13E 14L 15L 16E LA VIE EST BELLE .
es possible de ne pas inclure les espace ?