PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 29-08-2014 22:24:07

yule
Membre
Inscription : 24-09-2009
Messages : 35

Récupérer selon la position d'un mot, les 170 caractères

Re,

j'avance mais c'est de plus en plus misérable, j'aimerais selon une position précise, afficher le terme recherché avec 170 caractères qui précède ce mot et les 170 caractères qui suivent ce mot

Ce qui fonctionne et qui à l'air optimum...

$texte ="Google recherche images maps play youtube actualités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse *
recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions..";

$keyword = "le+[color=#ff482b]domaine[/color]+de+sa+vigne";

//+ --- je récupère le premier mot avec 4 caractères minimum

$words    = array_filter(explode('+', $keyword), function($p) { return strlen($p) > 4; });
$word     = reset($words);

echo "$word<br><br>"; // $word est le premier mot de plus de 4 lettres => domaine

//Je cherche la position de ce mot de 4 caractères minimum

$pos = stripos($texte, $word); // insensible à la casse, sinon strpos
if ($pos === false) {
    echo "Le terme '$word' ne se trouve pas dans la chaîne texte";
} else {
    echo "Le terme '$word' a été trouvée dans la chaîne texte<br><br>";
    echo " Le terme '$word' débute à la position $pos <br><br>"; // position 220
}

// domaine
// Le terme 'domaine' a été trouvée dans la chaîne texte
// Le terme 'domaine' débute à la position 220

Maintenant avec ce qui précède, je dois afficher les 170 caractères précédant ce $word "domaine" et les 170 suivants pour y afficher avec une découpe sur des mots entiers

Le résultat espéré => gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse   recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions.

IMPORTANT: il faudrait également prendre en compte que s'il n'y pas de 170 caractères avant ou 170 après $word et sa position ($pos), qu'il prennent en plus du $word "domaine" les 240 caractères le précédant ou les 240 caractères suivant

J'arrive qu'à ça (pathétique..:oops:)


// afficher 170 caractère après $word
$pos=$pos-1;
$start = $pos;
$length = 170;
$result = substr ($texte, $start, $length);


echo"$result <br><br>";
//domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions


// Afficher 170 caractères avant $word

$decompte = strlen($word); //7
$v=$length-$décompte; // 170-7 = 163
$x2=$pos-$v;  //220-163-1 = 58 (nouvelle position..)
$start = $x2; // 58
$result2 = substr ($texte, $start, $length);
echo"$result2 <br><br>";
// ités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le

echo"$result2$result <br><br>";
//ités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions

=> ités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions

Ça ne coupe pas proprement, ça ne prend pas en compte s'il y a assez de caractères avant et après $word et c'est surtout, pas du tout optimum arghhhhhh

J'essaye mais ça va pas....

A+
Yule

Hors ligne

#2 30-08-2014 12:27:16

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 628
Site Web

Re : Récupérer selon la position d'un mot, les 170 caractères

Bonjour,

pourquoi faire compliqué, quand on peut faire très simple?


$texte ="Google recherche images maps play youtube actualités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse *
recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions..";
preg_match('#([\w\-]+\.[\w]{2,3})#',$texte,$domaine);$domaine=$domaine[0];
if(strlen($domaine)===0){ print "domaine non trouvé"; exit;}
$prefix=substr($texte,0,strpos($texte,$domaine));
$suffix=substr($texte,strpos($texte,$domaine)+strlen($domaine),strlen($texte)-strlen($prefix)-strlen($domaine));
// à ce stade $texte=$prefix.$domaine.$suffix;
$prefix170=substr($prefix,-170); $prefix220=substr($prefix,-220);
$suffix170=substr($suffix,0,170); $suffix220=substr($suffix,0,220);
 

Bon week-end smile

Dernière modification par Jc (30-08-2014 12:37:14)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 30-08-2014 18:33:14

yule
Membre
Inscription : 24-09-2009
Messages : 35

Re : Récupérer selon la position d'un mot, les 170 caractères

Extra merci bien !!!
JE vais regarder tout ça et le mettre en pratique
Excellent week-end également
Yule

Hors ligne

Pied de page des forums