8768 sujets

Développement web côté serveur, CMS

Bonjour à toutes et tous,
J'essaie désespérément de récupérer des informations contenues entre crochets depuis une variable $texte.
$texte = 'Il était une bergère qui allait [au marché##123##].  Elle portait sur sa tête des [pommes##456##] dans un panier';

A la suite de quoi je souhaiterais que les données entre crochets deviennent des liens vers une autre page dont la valeur serait le nombre entre ##.
exemple :

Il était une bergère qui allait <a href="http://monsite.com?q=123>au marché</a>.  Elle portait sur sa tête des <a href="http://monsite.com?q=456>pommes</a> dans un panier';


!!! Je ne sais pas à l'avance si dans ma variable $texte il y aura 1, 2 ou 300 crochets.

J'ai déjà essayé avec Regex etc. J'imagine qu'il faut compter le nombre d'élément entre crochet + boucle. J'avoue que c'est un peu trop compliqué pour mon niveau de connaissance. Smiley ohwell

Quelqu'un pourrait-il me mettre sur la voie? Smiley biggrin
Grand merci d'avance!!!
Modifié par Beethov (19 Oct 2019 - 17:58)
Modérateur
Et l'eau,
Autant utiliser du markdown....

$chaine = "Il était une bergère qui allait [au marché##123##].  Elle portait sur sa tête des [pommes##456##] dans un panier";
$motif = "#\[(.*)\#\#(.*)\#\#\]#mU";
$parts = preg_split($motif, $chaine);
preg_match_all($motif, $chaine, $matches );
$output = '';
for($i = 0; $i < count($parts); $i++){
	$link = '';
	if(isset($matches[2][$i]) && isset($matches[1][$i])){
	    $link = sprintf('<a href="http://monsite.com?q=%s">%s</a>', $matches[2][$i], $matches[1][$i]); 
	}
	$output .= $parts[$i].$link;
}

echo $output;

Modifié par niuxe (20 Oct 2019 - 02:08)
Meilleure solution