Page 1 sur 1
enlever une sous chaîne ?
Posté : 22 août 2006, 15:59
par artotal
Bonjour,
je cherche à enlever une sous chaîne, plus exactement, le nom d'image :
$img='totototot.gif'; // résultat venant d'une base, donc aléatoire...
$nom=basename($img);
$elagage=strrchr($nom, '.');
echo $elagage;
Sa me donne l'extension du fichier et en faite je butte pour n'avoir le fichier sans l'extension.
Si je fait une comparaison avec un opérateur mathématique sa me renvoie un chiffre donc il faudrai forcé le typage en string, mais je ne me rapelle plus comment faire ?
Merci
Posté : 22 août 2006, 16:08
par aelurus
Regarde substr()
Posté : 22 août 2006, 16:12
par artotal
elle retourne le résultat de droite à gauche, donc l'extension, je cherhce le nom sans l'extension...
D'ou une soustraction sur la chaine entière possible qu'en forcant le typage, non ?
Posté : 22 août 2006, 16:17
par aelurus
:'(
<?php
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
// Accéder à un simple caractère dans une chaîne
// peut également être réalisé en utilisant des accolades
$string = 'abcdef';
echo $string{0}; // a
echo $string{3}; // d
echo $string{strlen($string)-1}; // f
?>
c'est avec cette fonction que sa ce fait ton histoire sisi je te dit ^^
Posté : 22 août 2006, 16:28
par graphistnet
La fonction split() te permet de découper une chaine en fonction d'une expression rationnelle, explode() découpe une chaîne en segments en fonction d'un séparateur (plus rapide que split()). Je pense que ca pourrait t'aider

Posté : 22 août 2006, 16:30
par artotal
cette fonction compte de gauche à droite, les noms reçus sont de taille variable d'ou mon besoin d'élager que l'extention du fichier.
J'ai réussi à isoler l'extension, maintenant je voudrai donc élager la chaîne initiale en soustraiyant l'extension ?
Posté : 22 août 2006, 16:39
par artotal
j'ai trouvé avec explode :
on peux voir le résultat ici :
http://creatif-web.be/anaska/projet/img_aleatoire.php
$nom=basename($img);
$elagage=strrchr($nom, '.');
$seg = explode(".", $nom);
echo $seg[0];
Merci pour vos conseil.
Posté : 22 août 2006, 16:42
par Ryle
Tu peux effectivement faire
- un explode() ou split() sur le point pour obtenir un tableau avec chaque chaine (attention toutefois aux noms de fichiers qui pourraient contenir un point)
- un strpos() et un substr() pour déterminer la position du point et couper ta chaine de 0 jusqu'à cette position
- utiliser les expressions régulière et faire un masque qui va jusqu'au point,
- ...
Posté : 22 août 2006, 16:44
par artotal
Le script complet pour une image aléatoire par chargement à partir d'un dossier avec le nom du fichier sans l'extension
<?php
function image_aleatoire($repertoire) {
//la variable $repertoire est le chemin d'un répertoire du type $repertoire="./chemin/dossier/"
// Extensions de fichiers à lister, séparer par "|"
$filetype="jpg|jpe|jpeg|gif|png";
//Ouverture puis listing du dossier
$repertoire_ouvert=opendir($repertoire);
while ($filesrc=readdir($repertoire_ouvert))
if (eregi("\.($filetype)$",$filesrc)) $filelist[]=$filesrc;
closedir($repertoire_ouvert);
//Concaténation du chemin du répertoire et de l'image choisie
$filealeatoire=$repertoire.$filelist[floor(rand(0,count($filelist)-1))];
//le résultat de la fonction est le chemin
return $filealeatoire ;
}
$repertoire="./voiture_img/";
$img=image_aleatoire($repertoire);
// sépare le nom du du fichier de sont extension
$nom=basename($img);
$elagage=strrchr($nom, '.');
$seg = explode(".", $nom);
//echo $seg[0];
echo $seg[0].'<br /><img src='.$img.' />';
/*
$requete="SELECT url_photo FROM voiture WHERE '".$img."'";
//echo $requete;
$resultat=mysql_query($requete, $lien) or die (mysql_error());
$affiche_tout=mysql_fetch_assoc($resultat);
$url_photo=$affiche_tout['url_photo'];
echo "<br /><img src=".$url_photo." /><br />";*/
// prochainement sortir de la base de donnée
?>
Posté : 22 août 2006, 17:07
par aelurus
Meme que j'avais raison ^^
<?php
$f3="01.teswdfbte.html";
$b= strlen($f3) - strpos ($f3,'.');
$nom= substr($f3,0,-$b);
$nom1= substr($f3,0,-5);
$nom2=substr($nom1,3,$b);
echo"<li>".$f3."</li>";
echo"<li>".$nom."</li>";
echo"<li>".$nom1."</li>";
echo"<li>".$nom2."</li>";
?>
affiche :
Posté : 22 août 2006, 17:10
par artotal
Même si tu as mis le doigt dessus, je ne connais pas la longeur de la chaîne à l'avance.
Posté : 23 août 2006, 08:05
par aelurus
Ra c'est encore moins drole ce que tu dit car cela veux dire que tu n'as pas tester ce ti bout de script car $f3 peux avoir n'importe qu'elle longueur :'( et si tu as des carractere speciaux dans les noms un htmlentities et hop le tour est jouer :'(...
Si tu as une autre methode je veux bien la voir s'il te plait.
Posté : 23 août 2006, 12:43
par artotal
<?php $nom=basename($img);
$elagage=strrchr($nom, '.');
$seg = explode(".", $nom);
echo $seg[0];
Posté : 23 août 2006, 12:54
par Ryle
je vois pas trop à quoi sert le strrchr dans ton code.. et pour un fichier nommé "01.teswdfbte.html" ton code ne fonctionne plus.
Personnellement je suis plus partisant de ce genre d'écriture :
$chaine = substr( $nom , 0 , strrpos($nom, '.') );
Tu recherches la position du dernier point et tu tronque la chaine