在文本中切片并将它们存储在变量中

时间:2011-11-04 18:46:22

标签: php arrays

我在$ content var中有一些文字,如下所示:

$content = $page_data->post_content;

我需要以某种方式切片内容并提取句子,将每个句子插入其自己的var中。 像这样:

$sentence1 = 'first sentence of the text';
$sentence2 = 'second sentence of the text';

依旧......

我该怎么做?

PS 我在考虑这样的事情,但我需要为每个句子提供一些循环:

$match = null;
preg_match('/(.*?[?\.!]{1,3})/', $content, $match);  
$sentence1 = $match[1];   
$sentence2 = $match[2]; 

泰:)

4 个答案:

答案 0 :(得分:2)

你在变量中需要它们吗?你不能使用数组吗?

$sentence = explode(". ", $page_data->post_content);

编辑:

如果您需要变量:

$allSentence = explode(". ", $page_data->post_content);
foreach($allSentence as $key => $val)
{
    ${"sentence". $key} = $val;
}

答案 1 :(得分:1)

假设每个句子以句号结束,您可以使用explode

$content = $page_data->post_content;
$sentences = explode('.', $content);

现在您的句子可以像:

echo $sentences[0];    // 1st sentence
echo $sentences[1];    // 2nd sentence
echo $sentences[2];    // 3rd sentence
// and so on

请注意,您可以使用countsizeof来计算总句子数:

echo count($sentences);

为每个句子创建一个新变量并不是一个好主意,想象一下你可能需要通过增加内存使用量来创建那么多数量的变量。您只需使用数组索引$sentences[0]$sentences[1]等等。

答案 2 :(得分:0)

请勿使用单独命名的变量,例如$sentence1$sentence2等。使用数组。

$sentences = explode('.', $page_data->post_content);

这为变量$page_data->post_content提供了一系列“句子”,其中“句子”实际上意味着句号之间的字符序列。只要句号完全用于表示句子结尾之外的其他内容(例如“沃森先生”),这个逻辑就会被绊倒。

编辑:当然,您可以使用更复杂的逻辑来检测句子边界,如您所建议的那样。您仍应 使用数组 ,而不是在名称末尾创建包含数字的未知数量的变量。

答案 3 :(得分:0)

假设通过终止标点符号来界定句子,可选地后跟空格,您可以执行以下操作来获取数组中的句子。

$sentences = preg_split('/[!?\.]\s?/', $content);

您可能希望使用

修剪任何其他空格
$sentences = array_map('trim', $sentences);

这样,$sentences[0]是第一个,$sentences[1]是第二个,依此类推。如果您需要循环浏览它们,可以使用foreach

foreach($sentences as $sentence) {
  // Do something with $sentence...
}