fonction substr

Eléphant du PHP | 68 Messages

05 janv. 2006, 21:28

je voudrais récupérer une partie d'une chaine de caractère contenu dans une variable.

pour cela je pensais utiliser la fonction substr mais le problème c'est que je ne veux pas couper ma chaine au milieu d'un mot.

connaissez vous un moyen pour que cette fonction coupe une chaine de caractère à un endroit ou il y a un espace?

peut être existe t-il une autre fonction pour faire cela?

Mammouth du PHP | 19672 Messages

05 janv. 2006, 21:39

Tu peux récupérer les différents mots d'une phrase par exemple avec explode:
<?php
$chaine = "Ceci est une phrase d'un intérêt absolument bouleversant";
$mots = explode(" ", $chaine);
?>
<pre>
<?php
var_dump($mots);
?>
</pre>
Ce petit bout de code va afficher la phase coupée selon le premier paramètre de explode(), ici un espace :

Code : Tout sélectionner

array(8) { [0]=> string(4) "Ceci" [1]=> string(3) "est" [2]=> string(3) "une" [3]=> string(6) "phrase" [4]=> string(5) "d'un" [5]=> string(7) "intérêt" [6]=> string(10) "absolument" [7]=> string(12) "bouleversant" }
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 68 Messages

05 janv. 2006, 21:49

ça implique de connaitre le contenu de ma chaine de caractère non?
puisqu'après tu indiques le nombre de caractère de chaque mot!

moi mon but, tu dois t'en douter vu mes derniers posts, c'est de récupérer des extraits de news saisis au préalable pour les afficher en version reduite sur ma page d'accueil! ensuite je cliquerai sur lire la suite et j'arriverai à ma page de news!

Mammouth du PHP | 19672 Messages

05 janv. 2006, 21:57

Ok, je crois que je commence à te voir venir: dans ce cas, tu dois sélectionner une portion de chaine dans une longueur maximale, par exemple 100 caractères avec substr().

Ensuite, il te faut repérer la position du dernier espace dans la portion de texte récupérer pour être sûr de pas couper un mot en deux: ça, tu peux le faire avec strrpos() Et quand tu as cette position, tu refais un coup de substr() et tu disposes du bon paramètre de longueur pour couper ta phrase.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 68 Messages

06 janv. 2006, 20:36

j'ai commencé a essayer de faire ce qu'on a dit mais j'ai un problème de conflit je crois entre ma page avec mes "mininews" et ma page avec mes news complètes!

au début j'ai cru que c'était du à l'utilisation de la même variable dans les deux pages $i alors j'ai mis sur une $i1 mais ça ne change rien!

dès que j'ajoute le code dans la partie gauche l'ajout de news les modifs de news etc... ne fonctionnent plus

page avec mininews:
for ($i1 = 1; ; $i1++) 
	
	{ if ($i1 <= 3)
		{$titre1    = mysql_result($req,$i1,"titre");
	  	 $contenu1  = mysql_result($req,$i1,"contenu");
	  	 $mininews  = substr($contenu1,0,30);
		echo"
		<table cellpadding=2 cellspacing=0 border=0 width=130>
		  <tr>
		    <td align='left'>> $titre</td>
		  </tr>
		  <tr>
		    <td align='left'>$mininews <a href=\"index.php?page=gazette\" title='aguanews'>suite...</a></td>
		  </tr>
		</table>";}
	  else 
		{echo"";}
		}	
Modifié en dernier par ayiore le 08 janv. 2006, 02:23, modifié 2 fois.

Mammouth du PHP | 19672 Messages

06 janv. 2006, 22:24

Il faut que tu isoles le problème: se farcir 300 lignes de code mal indenté pour trouver une erreur, ce n'est pas précisément un cadeau :?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 68 Messages

08 janv. 2006, 13:36

bonjour à tous!

bon j'ai presque tout résolu!

maintenant je m'attaque à la récupèration de la position du dernier espace dans la chaine dont j'ai préalablement récupéré les 30 premiers caractères.

mais ça ne fonctionne pas! je me contente d'afficher les 30 caractères sans m'arreter au dernier espace! une idée?
<? require "aguanews/config.php";

$db = mysql_connect("$dbserver", "$dbuser", "$dbpass");  
mysql_select_db("$dbbase",$db);
$req1 = mysql_query("SELECT * FROM todoonews order by date desc, heure desc");
$res1 = mysql_numrows($req1);
mysql_close($db);
$nbmnews=3;
if ($res1 <= $nbmnews) {$nbmnews = $res1-1;} else {echo "";}

for ($i1 = 0; $i1 <= $nbmnews ; $i1++) 
	
		{$titre1    = mysql_result($req1,$i1,"titre");
	  	 $contenu1  = mysql_result($req1,$i1,"contenu");
	  	 $contenu2  = substr($contenu1,0,30); //  on récupère les 30 premiers caractères de $contenu1
		 $deresp  = strrpos($contenu2, "");  // on récupère la position du dernier espace dans $contenu2
		 $mininews  = substr($contenu2,0,$deresp); 
		 ?>
		<table class="mintbl">
		  <tr>
		    <th>> <? echo $titre1?></th>
		  </tr>
		  <tr>
		    <td><? echo $mininews?> <a href="index.php?page=gazette" title="aguanews">&nbsp;suite...</a></td>
		  </tr>
		</table><? }
	  					
?>

Mammouth du PHP | 19672 Messages

08 janv. 2006, 14:13

Sauf erreur de ma part, ta recherche de chaine vide ne peut pas fonctionner:
Il faudrait remplacer ceci:
$deresp  = strrpos($contenu2, "");  // on récupère la position du dernier espace dans $contenu2 
Par ceci:
$deresp  = strrpos($contenu2, " ");  // on récupère la position du dernier espace dans $contenu2 
Notes-tu bien la différence ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 68 Messages

08 janv. 2006, 14:18

ah merci!

effectivement ça ne pouvait pas marcher!

maintenant c'est bon!