Extraction de la bonne chaine

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Extraction de la bonne chaine

par Flashball » 17 oct. 2008, 12:31

Toutefois, à l'édition du premier message, il vaut mieux préférer l'ajout d'un nouveau message
afin de respecter la chronologie des contributions et rendre cette solution plus visible.
Il me semble que j'avais essayé mais que ce n'était pas possible de se répondre à soi-même - il n'y avait pas encore de réponses à ce moment là...

par albat » 16 oct. 2008, 11:31

J'ai trouvé une solution et j'ai édité mon 1er post dès que j'ai trouvé une solution.
Excellente initiative ! Merci. :pouce:

Toutefois, à l'édition du premier message, il vaut mieux préférer l'ajout d'un nouveau message
afin de respecter la chronologie des contributions et rendre cette solution plus visible.

Quand on a déjà lu le premier message, il est rare qu'on relise le sujet initial
supposé ne contenir qu'une question et non une réponse.

par Flashball » 16 oct. 2008, 11:04

à partir d'une chaine tu demandes d'extraire ce qu'il y a au dela de "list/" et tu appliques ma formule à une chaine où "list/" ne figure pas et en plus tu veux ce qui est en deçà dans ton nouvel exemple...

Sois + clair dans tes formulations svp
J'ai été clair dès le départ sur ce que je voulais, il suffit de me lire attentivement.
Ton bout de code ne marche pas: je ne t'en veux pas et il n'y a aucune raison de se vexer!

explode extrait une chaine en utilisant un délimiteur, en l'occurence "list/" dans ton exemple, et le tableau retourné contient 2 éléments sans ce délimiteur.
est-ce que tu as vraiment besoin de l'aide d'un forum ?
J'ai d'abord simplifié mon problème avant de poster mais je précise que l'URL en question est évidemment dynamique: le bout de chaine après "/list/" varie en longueur.

J'ai trouvé une solution et j'ai édité mon 1er post dès que j'ai trouvé une solution.

Ensuite, je pense qu'il est toujours utile d'apprendre comment optimiser telle ou telle solution: je crois que c'est le cas avec la réponse de Berzemus!

par albat » 16 oct. 2008, 09:00

Pour obtenir : http://mondomaine/index.php/decoration/ ... -mer-terre
à partir de : http://mondomaine/index.php/decoration/ ... 1/0/0/32/0
sans utiliser les Regexp, juste avec des fonctions PHP de traitement de chaines :
function isolation_url($chaine)
{ // initialisation
  $chaine = 'http://mondomaine/index.php/decoration/list/42__air-mer-terre/1/0/0/32/0'; // si pas passée en paramètre
  $newchaine = '';

  // recherche du segment 'list/' puis découpage
  $a = strpos($chaine,'list/');
  $newchaine = substr($chaine,0,$a+5); // le +5 correspond à la longueur du segment 'list/' que l'on doit inclure
  $resteA = substr($chaine,$a+5);

  // recherche du segment suivant puis découpage
  $b = strpos($resteA,'/');
  $resteB = substr($resteA,0,$b);

  // Recollage
  $newchaine .= $resteB;

  return $newchaine;
}
ou, pour les grands malades dans mon genre :
function isolation_url($chaine)
{ return substr($chaine,0,strpos($chaine,'list/')+5).substr(substr($chaine,strpos($chaine,'list/')+5),0,strpos(substr($chaine,strpos($chaine,'list/')+5),'/'));
}
:shock: :langue:

par Dominic » 16 oct. 2008, 08:29

à partir d'une chaine tu demandes d'extraire ce qu'il y a au dela de "list/" et tu appliques ma formule à une chaine où "list/" ne figure pas et en plus tu veux ce qui est en deçà dans ton nouvel exemple...

Sois + clair dans tes formulations svp

sans rancune....

par caroube » 15 oct. 2008, 19:38

Merci mais ca ne marche pas!
Il faudrait peut-être, de temps en temps, regarder la syntaxe des fonctions PHP et -à partir de là- essayer de trouver un moyen (je ne veux pas dire algorithme) pour répondre à la question que tu t'es posée.

Regarde comment fonctionne la fonction explode(), fais quelques essais ... et je suis sûr que tu trouveras la solution à ton problème.

Et puis, si tu veux passer de

Code : Tout sélectionner

$url = Array ( [0] => http://mondomaine/index.php/decoration/ [1] => 84__vins-champagnes/1/18-20/30x40/64/0 )
à

Code : Tout sélectionner

http://mondomaine/index.php/decoration/84__vins-champagnes/
est-ce que tu as vraiment besoin de l'aide d'un forum ?

par Berzemus » 15 oct. 2008, 19:19

Ou simplement les expressions régulieres
(regarde des fonctions telles que preg_match() )

A la vollée, une expression telle que celle-ci devrait te trouver ce que tu veux:
$regex = "#http://[^/]+/[^/]+/[^/]+/[^/]+/[^/]+#i";
preg_match($regex,$tachaine,$matches);
print_r($matches);

par Flashball » 15 oct. 2008, 18:01

Merci mais ca ne marche pas!

Contenu du tableau après explode:

Code : Tout sélectionner

$url = Array ( [0] => http://mondomaine/index.php/decoration/ [1] => 84__vins-champagnes/1/18-20/30x40/64/0 )
ds ce cas, j'aurais souhaité récupérer "http://mondomaine/index.php/decoration/ ... hampagnes/"

par Dominic » 15 oct. 2008, 17:43

ceci sera + simple
$url="http://mondomaine/index.php/decoration/ ... 1/0/0/32/0";
$url=explode("list/",$url);
$extrait=$url[1];

Extraction de la bonne chaine

par Flashball » 15 oct. 2008, 16:49

Bonjour,

J'ai toujours autant de mal à utiliser les multiples fonctions de manipulations de chaine proposées par PHP...

J'ai une chaine type URL qui se compose ainsi:

Code : Tout sélectionner

http://mondomaine/index.php/decoration/list/42__air-mer-terre/1/0/0/32/0
Je souhaite extraire:

Code : Tout sélectionner

http://mondomaine/index.php/decoration/list/42__air-mer-terre
Quel est le moyen le plus adéquat?

Voilà l'algo que j'aimerais réaliser:

Code : Tout sélectionner

extrait la chaine de 0 à 1er élément "/" après la chaine "list/"
qq peut-il m'aider?
Merci!

voici ce que j'ai finalement trouvé:
$url = substr($url, 0, stripos($url, '/', stripos($url, 'list/') + 5) + 1);
si vous trouvez plus propre...