开发者

Php string handling tricks [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. 开发者_如何学JAVA Closed 11 years ago.

Need to get the 10 word before and 10 words after for the given text . i mean need to start the 10 words before the keyword and end with 10 word after the key word.

Given text : "Twenty-three"

The main trick : content having some html tags etc .. tags need to keep that tag with this content only . need to display the words from 10before - 10after

content is bellow :

removed

Thank you


This method assumes the words are only separated by spaces (not tabs, newlines or other whitespace) and is dependent upon the PHP library function "strip tags" which probably assumes well-formed HTML (which in my experience is a bad assumption).

$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);

untested but i believe it's an effective approach

optionally, you can sterilize the whitespace:

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


<?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;
?>


This should do the trick :

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];
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜