从产品描述中提取10个单词,进入页面$ title

时间:2014-07-21 09:31:57

标签: php

我在网站上列出了1500种产品。默认情况下,页面标题都是相同的

$title="Detail Turkish Property For Sale in Turkey";

为了使页面标题更具描述性,我希望从页面产品说明中获取前10个单词,以显示在页面标题中。

我试过这个例子没有变化,

$title = stripslashes(substr($emlaklist->aciklama,0,80));

您对解决此问题的建议表示赞赏。

4 个答案:

答案 0 :(得分:2)

以下是从How can I truncate a string to the first 20 words in PHP?复制的功能,因此我对此不予理睬,但它确实可以满足您的需求。

function limit_text($text, $limit) {
  if (str_word_count($text, 0) > $limit) {
      $words = str_word_count($text, 2);
      $pos = array_keys($words);
      $text = substr($text, 0, $pos[$limit]) . '...';
  }
  return $text;
}

答案 1 :(得分:1)

您需要一些处理字符串的方法,因为检查单词比检查字符稍微复杂一些。这个例子实际上取自Laravel框架,并进行了一些小的改编,使其独立工作。

/**
* @param {String} the value to shorten
* @param {Integer} number of words allowed
* @param {String} what to put on the end of the string
* @return {String}
*/
function words($value, $words = 100, $end = '...')
{
    preg_match('/^\s*+(?:\S++\s*+){1,'.$words.'}/u', $value, $matches);

    if ( ! isset($matches[0])) return $value;

    if (strlen($value) == strlen($matches[0])) return $value;

    return rtrim($matches[0]).$end;
}

然后你可以使用类似的东西:

$title = words($title, 10, '<a href="#">Read more</a>');

将此用于您的代码:

$title = words($emlaklist->aciklama, 10, '');

确保声明了该功能,如果需要,只需从此处复制粘贴。另外,请确保$emlaklist->aciklama包含您需要的内容。

答案 2 :(得分:1)

这应该适合你。让我们说:

$title="Detail Turkish Property For Sale in Turkey";
$description = implode(' ',array_slice(explode(' ', $title), 0, 10));

以下是php手册的链接,用于解释所使用的功能:

爆炸功能 - http://php.net/manual/en/function.explode.php
array_slice函数 - http://au2.php.net/manual/en/function.array-slice.php
内爆函数 - http://au2.php.net/manual/en/function.implode.php

古德勒克。

答案 3 :(得分:1)

根据我在评论中看到的内容,您首先必须确保变量$emlaklist已设置,如果您愿意将其值附加到$title变量。

通常,您可能会尝试将以$emlaklist = ..开头的代码部分复制到$title =之前的位置,但很可能这是数据库请求,因此您可能需要采取其他方式代码考虑在内,这有助于获得这个价值......

除此之外,这里的其他答案将非常能够处理缩短您的描述等。

(讽刺这个评论太长了,但无论如何它可能会有所帮助。)