2010-03-29 6 views
-1

Besoin d'obtenir le mot 10 avant et 10 mots après pour le texte donné. Je veux dire besoin de commencer les 10 mots avant le mot-clé et terminer avec 10 mots après le mot-clé.Trucs de manipulation de chaîne de php

texte donné: « Vingt-trois »

La principale astuce: le contenu ayant des balises html etc .. balises doivent garder cette étiquette avec ce contenu uniquement. besoin d'afficher les mots de 10before - 10Après

contenu

est ci-dessous:

removed 

Merci

+0

pourrait vous donnez un exemple de la sortie que vous attendez de thi s fonction? – Andy

+0

Et pouvez-vous ajouter des sauts de ligne à votre exemple? C'est très difficile à lire maintenant. –

+0

@Dam - s'il vous plaît trouver un autre exemple de texte pour votre question. – user187291

Répondre

1

Cette méthode suppose que les mots ne sont séparés par des espaces (sans onglets, les sauts de lignes ou d'autres espaces blancs) et dépend de la fonction de la bibliothèque PHP "tags de bande" qui suppose probablement HTML bien formé (qui, selon mon expérience est une mauvaise hypothèse).

$string_content = strip_tags($html_content); 
$start_cursor = $end_cursor = strpos($string_content, 'Twenty-three'); 
for($i = 0; $i < 10; $i++) { // rewind backwards until we find 10 spaces 
    $start_cursor = strrpos($string_content, ' ', $start_cursor); 
} 
for($i = 0; $i <= 10; $i++) { // skip forward until we find eleven spaces 
    $end_cursor = strpos($string_content, ' ', $end_cursor); 
} 
$result_string = substr($string_content, $start_cursor, $end_cursor - $start_cursor); 

non testé, mais je crois qu'il est une approche efficace

En option, vous pouvez stériliser les espaces blancs:

$string_content = strip_tags($html_content); 
$string_content = preg_replace("/\s+/", " ", $string_content); // replace any number of adjacent whitespace characters with a single space 
+0

note: cela montrera moins de 10 mots si des espaces adjacents sont trouvés. Il y a des façons plus lentes de le faire d'une manière plus flexible si vous voulez ... – David

+0

Salut merci mais les "strpos" seulement peuvent obtenir la position pour la première chaîne seulement son non pris le "Vingt-trois" entièrement je pense ... – Subha

+0

Salut, merci pour l'aide strip_tags en php même comme besoin d'utiliser dans mysql je ne veux pas obtenir la ligne ayant la keyowrd dans les balises Html requête WHERE ' « mot-clé » Text' = – Subha

0
<?php 
$find = 'Twenty-three'; 
$words = explode(' ', $string); 
$wordsLimit = 10; // 10 words 

// Number of words 
$wordsLength = count($words); 

// Find the position of the word ($find) inside the phrase 
$findPosition = (in_array($find, $words)) ? array_search($find, $words) : 0; 

// Cut the phrase 
$beforeIndex = max(0, ($findPosition - $wordsLimit)); 
$afterIndex = min($wordsLength, ($findPosition + $wordsLimit + 1)); 
$words = array_slice($words, $beforeIndex, $afterIndex); 

// Display the final phrase 
$string = join(' ', $words); 
echo $words; 
?> 
0

Cela devrait faire l'affaire:

function getSurrounding($string, $needle){ 
    // Strip html tags 
    $string = strip_tags($string); 
    // Concat blank characters 
    $string = preg_replace('`\\s+`', ' ', $string); 
    // Use some regexp magic 
    preg_match_all('`(?:[^ ]+){10}'.$needle.'(?: [^ ]+){10}`', $string, $blocks); 
    return $blocks[0]; 
}