ne pas compter les espace dans i++

Eléphant du PHP | 65 Messages

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 ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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++;
}
?>
@+
Modifié en dernier par moogli le 30 nov. 2011, 20:12, modifié 1 fois.
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

30 nov. 2011, 20:08

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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 ;)
Il en faut peu pour être heureux ......

Eléphant du PHP | 65 Messages

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 nov. 2011, 20:46

un array_walk pour virer les espaces ?
Il en faut peu pour être heureux ......

Eléphant du PHP | 65 Messages

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?

Eléphant du PHP | 267 Messages

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

Eléphant du PHP | 65 Messages

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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 :)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 65 Messages

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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 ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 65 Messages

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

Eléphant du PHP | 65 Messages

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