traitement d'une chaine en PHP

WRInaute passionné
Bonjour
Je voudrais sur par exemple cette chaine de caractère:

-http://www.site.com/topic-whitburn-rogue-tradesmen-688-32-3

enlever la fin à partir du tiret, soit dans ce cas la enlever le -3 pour qu'il reste

-http://www.site.com/topic-whitburn-rogue-tradesmen-688-32

Autre exemple, si j'ai
-http://www.site.com/topic-whitburn-rogue-tradesmen-688-32-12

il faut enlever le -12 pour qu'il reste

-http://www.site.com/topic-whitburn-rogue-tradesmen-688-32


Voila, y a t'il une petite fonction toute simple?

Merci pour l'aide
 
WRInaute passionné
c'est exactement le genre de fonction qui manque en php (du moins 4XX)

en plus celle qui te donne la position de la dernière occurence est buggée

un explode('-'

et un implode('-' sur count -1 devrait etre fiable

rog
 
WRInaute passionné
ouai

Krysss l'URL n'est jamais la même, elle peut être plus longue
donc le 57 est faussé!

Pour rog, tu as un exemple d'utilisation de ta fonction?

Merci
 
WRInaute discret
Code:
substr($string, 0, strrpos($string, "-"));

Je vois pas en quoi strrpos() serait pas fiable ...
 
WRInaute occasionnel
A tester :

Code:
$fin_url = end(explode("-", $url));
$url = substr($url, 0, strlen($url) - strlen ($fin_url) - 1);


Edit: Je vais quand meme expliquer le code, première ligne je recupe le chiffre à enlever, puis la seconde je coupe la chaine en faisant la longueur de l'url moin la longueur du chiffre moin 1 pour le tiret. C'est pompeu mais ca devrai marcher, je n'ai pas tester.
 
WRInaute passionné
la fonction me retournait la position de la premiere occurence

apres une recherche sur le net, j'ai remarqué que je n'étais pas le seul à rencontrer ce probleme

et si c'etait fiable j'aurait pas été obligé de pondre celle ci pour virus tester

Code:
#########################################################################################################################
# 	the function will retrive the position byte to end the clone gen
function _strrpos($haystack,$needle){ 
#	
if(empty($haystack) || empty($needle))
	{
	$return = FALSE;
	}
	else
	{
	$explode = explode($needle,$haystack);
	$size = strlen(end($explode));
	$return = strlen($haystack) - ($size);
	}
unset($haystack, $needle, $explode, $size);
#
return $return ; 
} 
#########################################################################################################################

rog
 
WRInaute discret
Ah bah ça doit être lié à la version de PHP alors, car j'ai jamais eu de problèmes (mais je veux bien te croire :))

Sinon, y'a une autre solution en utilisant preg_match() :
Code:
preg_match("|(.*)-([^-]*)|", $string, $match);
Mais bon, on arrive dans des choses qui servent à rien, même si ça fait plaisir :D
 
Discussions similaires
Haut